将领带纳入while循环

时间:2018-10-10 00:34:11

标签: python python-3.x while-loop

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

编写一个Python程序,该程序将模拟 卡 游戏。
在游戏中,每个都有两名玩家 10张卡面朝下。在每个回合中,每个玩家都将交出自己的最高牌。具有 该回合中最高的牌获胜,并且在该回合中所有玩过的牌。 赢得的卡是 添加到获胜者的 一堆纸牌。
有领带时 在回合中 ,每个 玩家将 将他们的下一张卡片从堆中移到 确定该轮的获胜者。
如果玩家在比赛期间由于过多的联系而用完了纸牌 回合,玩家将获得新卡 直到确定该回合的赢家为止。
当玩家的纸牌用完时,游戏结束。游戏的赢家是仍然 游戏结束时还剩下纸牌。 一副纸牌可以用数字1表示 – 13,其中1是低A ,11是杰克,12是 女王,而13是国王。面部卡的数值为2到10。
适合 在这个游戏中没关系。 假设您正在撰写 游戏 2位玩家。使用整数变量来跟上 每个玩家手中的纸牌数量。镭 几乎不为每个生成卡值 轮换卡时玩家的手。 (即,请勿将它们存储在 时间在列表中。)
在本实验中,不必担心重复使用一轮赢得的卡值。代替 只是产生新的 每个回合中每个玩家的随机卡值。 确保输出每张纸牌的值以及每轮的赢家。如果 如果有平局,则输出应在回合中中继该事实。在游戏结束时,输出 获胜者,冠军 给玩家。

我想大部分都已经弄清楚了。 但是,我找不到在while循环底部的领带。 它说要计算连续存在的平局数目,然后将所有这些卡发给最终的赢家,但我不确定如何。 当我运行这段代码时,它不断告诉我我有一个领带,并且是一个无限循环。 我只是想朝着正确的方向前进。

这是我的代码

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()

1 个答案:

答案 0 :(得分:0)

发生无限循环是因为P1P2开始相等,但是您的条件语句解析为False,所以P1P2永远不会得到改变的机会。他们总是一样的。

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

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_deck。或者,如果您期望_deck的值为零,请关注为什么它们不为零。这足以使您在这里有一些动力。祝你好运!