Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一个while循环中包括一条领带_Python_Python 3.x_While Loop - Fatal编程技术网

Python 在一个while循环中包括一条领带

Python 在一个while循环中包括一条领带,python,python-3.x,while-loop,Python,Python 3.x,While Loop,我在大学里为我的Python课做一个实验室。 这些是说明 编写一个Python程序来模拟 卡片 游戏。 在游戏中,每人有两名玩家 10张牌面朝下。在每一轮中,每位玩家将翻转他们的顶牌。持有 最高的牌将赢得该轮以及该轮中所有的牌。 赢的牌是 添加到获胜者的 一堆卡片。 虽然有一条领带 在回合中 每个 玩家意志 把他们的下一张牌从牌堆上交给 确定这一轮的获胜者。 如果玩家在一场比赛中因为打了太多的平局而用完了牌 第二轮,玩家将获得新的牌 直到这一轮的获胜者确定。 当玩家的牌用完时,游戏结束。游戏的赢

我在大学里为我的Python课做一个实验室。 这些是说明

编写一个Python程序来模拟 卡片 游戏。
在游戏中,每人有两名玩家 10张牌面朝下。在每一轮中,每位玩家将翻转他们的顶牌。持有 最高的牌将赢得该轮以及该轮中所有的牌。
赢的牌是 添加到获胜者的 一堆卡片。
虽然有一条领带 在回合中 每个 玩家意志 把他们的下一张牌从牌堆上交给 确定这一轮的获胜者。
如果玩家在一场比赛中因为打了太多的平局而用完了牌 第二轮,玩家将获得新的牌 直到这一轮的获胜者确定。
当玩家的牌用完时,游戏结束。游戏的赢家是仍在玩的玩家 游戏结束时还有牌。 一副牌可以用数字1表示 – 13,其中1为低a ,11是杰克,12是杰克 女王,13是国王。人脸卡由数字2到10表示。
适合 在这个游戏里没关系。 假设您正在编写 游戏 对于两个玩家。使用整数变量来跟上 每位玩家手中的牌数。Ra n仅为每个卡生成卡值 在回合中翻牌时玩家的手。 (即,不要提前储存 列表中的时间。)
对于这个实验,不要担心重复使用一轮中赢得的卡值 只需生成新的 每轮每个玩家的随机卡值。 确保输出所玩每张牌的值以及每轮的赢家。如果 如果是平局,输出应该在回合中传递这一事实。在比赛结束时,输出 胜利者 给球员们。”

我想我已经把大部分都弄明白了。 然而,我不能计算出在底部的领带,而循环。 上面说数一数一排的平局数,然后把所有的牌都给最终的赢家,但我不知道怎么做。 当我运行这段代码时,它不断地告诉我我有一个平局,这是一个无限循环。 我只是想成为正确方向的领导者。

这是我的代码

import random

def main():
    print("Welcome to the Game of War!")

    p1_deck = 10
    p2_deck = 10

    while(p1_deck or p2_deck >0):
        P1 = random.randrange(1,11)
        P2 = random.randrange(1,11)
        print("Player 1's card is", P1)
        print("Player 2's card is", P2)
        if(P1>P2):
            print("Player 1 wins the round!")
            p1_deck +=1  
            p2_deck -=1
            print("Player 1's deck now has", p1_deck,"cards.")
            print("Player 2's deck now has", p2_deck,"cards.")

        elif(P2>P1):
            print("Player 2 wins the round!")
            p2_deck +=1  
            p1_deck -=1
            print("Player 1's deck now has", p1_deck,"cards.")
            print("Player 2's deck now has", p2_deck,"cards.")

        else:
            while(P1==P2):
                print("It is a tie! To break the tie, another card must be turned over.")
                if(p1_deck==0 and p2_deck==0):
                    p1_deck +=1
                    p2_deck +=1
                    P1 = random.randrange(1,11)
                    P2 = random.randrange(1,11)
                    print("Player 1's card is", P1)
                    print("Player 2's card is", P2)
                    if(P1>P2):
                        print("Player 1 wins the round!")
                        p1_deck +=1  
                        p2_deck -=1
                    elif(P2>P1):
                        print("Player 2 wins the round!")
                        p2_deck +=1  
                        p1_deck -=1




main()

无限循环之所以发生,是因为
P1
P2
开始相等,但您的条件语句解析为
False
,因此
P1
P2
永远没有机会更改。它们总是一样的

尝试在内部
while()
循环后添加
print
语句,以便自己查看:

while(P1==P2):
    print(f"P1: {P1}, P2: {P2}")
    print(f"p1_deck: {p1_deck}, p2_deck: {p2_deck}")
    #...
输出:

P1: 2, P2: 2
p1_deck: 10, p2_deck: 10
It is a tie! To break the tie, another card must be turned over.
# infinite loop...

考虑如何让
P1
P2
更新,即使
\u deck
值不是零。或者,如果您希望
\u deck
值为零,请关注为什么它们不是零。这应该足够给你们带来一些动力。祝你好运

顺便说一句,
while(p1\u-deck或p2\u-deck>0):
应该是
while(p1\u-deck>0或p2\u-deck>0):
。你的变体碰巧在这里工作,但不是(我猜)你的意思。我在没有它的情况下测试了我的代码,它也永远不会结束,它允许组进入负数。为什么会这样?我觉得我的第一个while循环好像不正确。它应该在一副牌打到零牌时结束。你写道:“当我运行这个代码时,它不断告诉我我有一个平局,这是一个无限循环。我只是想在正确的方向上领先。”我希望我的答案给了你一个正确的方向,为什么它总是告诉你平局和无限循环。我不确定你现在在评论中问了什么,但这听起来像是一个关于循环的问题之外的问题。通常,最好一次只发布一个问题,或者清楚地说明问题的确切内容。考虑编辑你的最初的帖子或者打开一个新的帖子。除了我最初的问题之外,我把所有的事情都想出来了。当他们连续打了两张或两张以上的平局时,应该将这些牌数一数,并给出赢家有多少张平局,输家应该输掉多少张牌。我不知道该怎么做。这是最初的问题。