【问题标题】:While loop still running even when the condition is false即使条件为假,While 循环仍在运行
【发布时间】:2021-07-29 10:08:12
【问题描述】:

我一直在做一个井字游戏项目,但是,有一个问题:

intro()

row_top = [' ','|',' ','|',' ']
line = ['-','-','-','-','-']
row_mid = [' ','|',' ','|',' ']
row_low = [' ','|',' ','|',' ']

default = (' ' in row_top or ' ' in row_mid or ' ' in row_low)

p1 = True

while default:

    while p1 :

        p1c = int(input('P1 turn! insert the position you want to place the marker:'))

        if inserter_1(p1c) != 'Error':
            display()
            p1 = False

    while not p1:

        p2c = int(input('P2 turn! insert the position you want to place the marker:'))

        if inserter_2(p2c) != 'Error':
            display()
            p1 = True

winner_check()

inserter() 函数将空格字符串的值更改为“X”或“O”,并且 display() 函数打印出棋盘。

即使display() 函数显示板已被填满(这意味着所有行中都没有' '),它仍然要求输入。

真正令人困惑的是 default 条件绝对是错误的,我什至尝试添加一个从 1 到 9 的数字列表,并在每次玩家输入时删除一个数字,但它仍然不工作。

任何帮助将不胜感激。非常感谢!

【问题讨论】:

  • 您是否正在更新default,看起来它被评估为True,然后在进行更新时不会再次调用以进行更改。这不会随着董事会的变化而改变。
  • 你能分享一下intro()display()
  • 您想将default 转换为一个函数,并在每次要评估它时调用该函数。问题是,程序总是重新评估变量的值会非常昂贵,所以你不想这样做。变量用于评估事物一次并将该信息存储在某处,因此无需多次重新评估事物(并简化代码)。在这种情况下,您也可以将 default 替换为您作为变量值的表达式?
  • 感谢您的回复!我发布了错误版本的代码,实际上我将“while default”更改为 row_top 中的“while”或 row_mid 中的“”或 row_low 中的“”,但效果相同

标签: python loops while-loop


【解决方案1】:

这里有一个小测验,你认为这个表达式多久被评估一次? 代码达到默认 = 时只有一次。 您似乎认为每次都会重新评估默认值,但它只是永远携带 True ,因为它永远不会改变。 尝试将 default 替换为 while 循环中使用的表达式

【讨论】:

  • 感谢您的回复。我发布了错误版本的代码,实际上我将“while default”更改为 row_top 中的“while”或 row_mid 中的“”或 row_low 中的“”,但效果相同
【解决方案2】:

有一些关于“”的边缘情况。我在 jupyter notebook 上测试了“默认”:

现在注意 row_top[0]。未填充但返回false

看看这个。应该返回 true 但返回 false。我将default的条件从 ' ' 更改为 '' 以注意小的变化。

另一个极端情况:

在操作状态的时候,就是在打破逻辑

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多