【问题标题】:Super simple while loop超级简单的while循环
【发布时间】:2020-04-16 02:12:47
【问题描述】:

运行 while 循环,直到所有三个值都小于或等于 0。每次更改三个变量的值时,都在同一行打印出它们的新值,并用单个空格分隔。例如,如果它们的值分别为 3、4 和 5,您的代码将打印:
2 3 4
1 2 3
0 1 2
-1 0 1
-2 -1 0

我的代码是:

    while (mystery_int_1 and mystery_int_2 and mystery_int_3) >= 0:
        mystery_int_1 -= 1
        mystery_int_2 -= 1
        mystery_int_3 -= 1
        print(mystery_int_1, mystery_int_2, mystery_int_3)

它产生:
2 3 4
1 2 3
0 1 2
-1 0 1
-2 -1 0
-3 -2 -1

我知道答案会让我觉得自己像个白痴,但我想不通

【问题讨论】:

  • 您的语法没有按照您的想法执行。将while 测试更改为while mystery_int_1 >= 0 and mystery_int_2 >= 0 and mystery_int_3 >= 0: 您现在所要做的是检查所有三个值是否非零,然后比较该结果(如果有的话,这将是第一个0 值,否则最后一个(非零)值)为 0。根本不是你想要的。
  • 例如,试试这个:(-1 and 1) >= 0。它将是True,因为它在比较中使用最后一个非零值1。但是-1 >= 0 and 1 >= 0 将是False,这就是你想要的。
  • 这能回答你的问题吗? How to test multiple variables against a value?
  • 我将其更改为 while 神秘_int_1 >= 0 和神秘_int_2 >= 0 和神秘_int_3 >= 0:现在它提前停止 1 行而不是太迟停止 1 行。

标签: python while-loop


【解决方案1】:

你的布尔表达式是错误的,尝试使用这个并理解它的工作原理:

while (mystery_int_1 > 0 or mystery_int_2 > 0 or mystery_int_3 > 0) :

使用and 是错误的,因为如果其中一个变量使条件制动,则循环停止,但您希望它仅在所有变量制动条件时才停止。所以,你使用or

【讨论】:

  • 这里不需要括号。
猜你喜欢
  • 1970-01-01
  • 2021-05-29
  • 2014-03-09
  • 2014-11-11
  • 2011-06-17
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
相关资源
最近更新 更多