【问题标题】:My loop is stuck in infinite loop I feel there are no errors please prove me wrong?我的循环卡在无限循环中我觉得没有错误请证明我错了吗?
【发布时间】:2020-04-23 14:54:38
【问题描述】:

我的循环无限循环我很确定它不应该发生?

这是我的代码:

def move(x, movie, g):
    global boo
    while boo:
        ij = 0
        for i in g:
            ij += 1
            if ij == movie and g[ij - 1] == "":
                g[ij - 1] = x
                boo = False
                break
            elif ij == 9 and movie == 9 and not g[ij - 1] == "":
                movie = input("Already occupied try again: ")
                boo = False
    return g

我正在尝试为井字游戏制作函数。

此处更新所需的详细信息:

import md
g = ["", "", "o", "o", "", "", "", "", ""]
md.move("x", 4, g)
print(g)

卡在函数的占用部分

【问题讨论】:

  • 好吧,可能不满足 if/else 条件,boo 永远不会设置为 False。在您设置boo = False 的位置添加另一个else 分支,您应该没问题。
  • 备注:boo 是一个错误的变量名,因为您看不到它的用途。
  • 您需要提供minimal reproducible exampleboo 在被引用之前未定义。 md 是什么?是不是上面那个包含move函数的模块?出于示例的目的,请尝试将其移至同一模块中。顺便说一句,欢迎来到 SO!查看tourHow to Ask 获取其他建议。

标签: python python-3.x list loops


【解决方案1】:

两个停止条件都不满足:

ij == movie and g[ij - 1] == ""

当ij ==电影(即ij为4)时,则g[ij-1](即g[3])不为空,为“o”

ij == 9 and movie == 9 and not g[ij - 1] == "" 

当 ij 为 9 时,movie 不是 9

所以 boo 永远不会被设置为 False 并且 While 循环会永远重复

【讨论】:

    【解决方案2】:

    手动调试 boo 不能设置为 False。

    仔细查看您的代码:

    ij等于4时,g[3]等于o。您的第一个条件失败。

    第二个条件在任何时候都不能成功,因为 movie 等于 4。而 9 是预期的。

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      相关资源
      最近更新 更多