我想知道为什么我的程序没有在while循环中停止

时间:2019-05-02 09:03:14

标签: python python-3.x

嗨,我有以下问题-编写一个程序来玩以下简单的游戏。玩家以$ 100开始。在各个 转硬币被翻转,玩家不得不猜测正面还是反面。玩家每人赢得$ 9 正确的猜测,每次错误的猜测将损失$ 10。当玩家进入游戏时游戏结束 钱用完或达到200美元。

我的程序实际上正在运行。但是,当玩家分数降到零时,我的程序仍然运行,这不是我期望的。我需要知道是否可以在if语句中做某些事情,或者在我有很多条件的情况下是否有更简单的方法来做陈述。

import random

list=['heads','tails']
def game():
    p1=100
    p2=100
    while (p1>0 or p2>0)and(p1<200 or p2<200):
        x=random.choice(list)
        x1=input('digit your guess player1 - ')
        x2=input('digit your guess player2 - ')
        if x1==x:
            p1+=30
        else:
            p1=p1-40
        if x2==x:
            p2+=30
        else:
            p2=p2-40
    return p1,p2
print(game())

我希望程序返回分数并在玩家得分超过200或低于0时结束

2 个答案:

答案 0 :(得分:0)

将while条件更改为:

while p1>0 and p2>0 and p1<200 and p2<200

但在以下情况下更具可读性

while 0<p1<200 and 0<p2<200

答案 1 :(得分:0)

如果我考虑您的原始问题,那么问题是您要退还玩家拥有的任何当前值,而应该记住上一个分数,并且如果您希望游戏继续下去的情况发生了,请返回上一个分数。这样可以确保仅返回有效分数

import random

list=['heads','tails']
def game():
    player=100
    last_score = 0

    #Conditions to break while loop
    while player > 0 and player < 200:

        #Keep track of last score
        last_score = player

        #Get choice from player, and increase/decrease score
        x=random.choice(list)
        x1=input('digit your guess player1 - ')
        if x1 == x:
            player += 9
        else:
            player -= 10

    #Return last score
    return last_score

print(game())

将此想法扩展到2人游戏也将解决您的问题!

import random

list=['heads','tails']

def game():
    p1=100
    p2=100
    last_scores = 0,0


    # Conditions to break while loop
    while (0<p1<200) and(0<p2<200):

        # Keep track of last score
        last_scores = p1,p2

        # Get choice from player, and increase/decrease score
        x=random.choice(list)
        x1=input('digit your guess player1 - ')
        x2=input('digit your guess player2 - ')

        if x1==x:
            p1+=30
        else:
            p1=p1-40
        if x2==x:
            p2+=30
        else:
            p2=p2-40

    return last_scores

print(game())