【问题标题】:My "while loop" not working as expected我的“while 循环”没有按预期工作
【发布时间】:2017-10-23 10:02:27
【问题描述】:

我是一名新的编码员,如果我的问题不好或我没有遵守适当的礼仪,请见谅!

我正在设计一个掷骰子的基本程序。它应该掷骰子,直到计算机或用户的总点数等于 100。但是,即使我的总点数正在工作,循环也不会结束。有谁知道这是为什么?谢谢!


def main():
        GAME_END_POINTS = 100
        COMPUTER_HOLD = 10
        is_user_turn = True
        user_pt = 0
        computer_pt = 0
        welcome()
        while computer_pt < GAME_END_POINTS or user_pt < GAME_END_POINTS:
            print_current_player(is_user_turn)
            if is_user_turn is True:
                user_pt = user_pt + take_turn(is_user_turn, COMPUTER_HOLD)
            elif is_user_turn is False:
                computer_pt = computer_pt + take_turn(is_user_turn, COMPUTER_HOLD)
            report_points(user_pt, computer_pt)
            is_user_turn = get_next_player(is_user_turn)

【问题讨论】:

  • take_turn 和 get_next_player 的代码在哪里
  • @VinceW.: 该代码无关
  • if is_user_turn is True: 可以变成if is_user_turn: 并且你不需要检查elif is_user_turn is False:。它只能是真或假,所以只需else: 就足够了。

标签: python


【解决方案1】:

条件始终为True,因为无论是计算机还是用户的总分都会少于 100。

and代替or

while computer_pt < GAME_END_POINTS and user_pt < GAME_END_POINTS:

现在只有当用户和计算机的总分都小于 100 时,循环才会继续。只要其中一个分数超过 100,条件将是 False 和循环将终止。

【讨论】:

  • 谢谢!不敢相信我没看到!
  • @mhawke,一个用户的分数总是低于 100 分的断言似乎来自于永无止境的循环。这在某处的代码中是否明显?我要求查看其他函数的原因是因为不清楚积分是如何分配的,而且在不了解游戏规则的情况下,在某些时候两个玩家的积分都超过 100 分似乎是合理的。
【解决方案2】:

只有在两个 computer_pt &gt;= GAME_END_POINTS and user_pt &gt;= GAME_END_POINTS 时,你的 while 循环才会结束。你确定这两个变量满足这两个条件吗?

【讨论】:

    【解决方案3】:

    您可以在循环中打印computer_pt和user_pt,看看这两个变量发生了什么,然后您将自己找到答案。 循环打印变量是调试代码的常用方法。

    【讨论】:

    • 谢谢!下次遇到这个问题我一定会用这个。
    猜你喜欢
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多