Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 导致无限while循环的逻辑错误_Python_Python 3.x - Fatal编程技术网

Python 导致无限while循环的逻辑错误

Python 导致无限while循环的逻辑错误,python,python-3.x,Python,Python 3.x,当用户输入数字0并且程序执行任务0时,while循环不会像我预期的那样结束。这是为什么?我该如何修复它 def task0(): print("Goodbye") end = "true" end = "false" while end != "true": print() tasknum = input("Which task would you like to see? ") print() task = "task" + tasknum

当用户输入数字0并且程序执行任务0时,while循环不会像我预期的那样结束。这是为什么?我该如何修复它

def task0():
    print("Goodbye")
    end = "true"
end = "false"
while end != "true":
    print()
    tasknum = input("Which task would you like to see? ")
    print()
    task = "task" + tasknum
    methodToCall = globals()[task]
    result = methodToCall()

最好使用返回值与函数通信,而不是更改全局名称

另外,使用
True
False
,不需要使用字符串比较

简而言之,从函数中返回
True
,并将其分配给
end

def task0():
    print("Goodbye")
    return True

end = False
while not end:
    print()
    tasknum = input("Which task would you like to see? ")
    print()
    task = "task" + tasknum
    methodToCall = globals()[task]
    end = methodToCall()

然后检查并适当结束。

最好使用返回值与函数通信,而不是更改全局名称

另外,使用
True
False
,不需要使用字符串比较

简而言之,从函数中返回
True
,并将其分配给
end

def task0():
    print("Goodbye")
    return True

end = False
while not end:
    print()
    tasknum = input("Which task would you like to see? ")
    print()
    task = "task" + tasknum
    methodToCall = globals()[task]
    end = methodToCall()

然后检查并适当结束。

您需要在Task0中定义
全局结束
为什么不使用布尔值(真、假)?另外,请使用任务的
列表
而不是在
全局
中查找变量。您需要在Task0中定义
全局结束
为什么不使用布尔值(对,错)?此外,请使用任务的
列表
,而不是在
全局
中查找变量。此外,正如@tobias__k在上面的评论中所说,使用有效任务的列表可能更安全。
[task0,task1,…]
synchronizer在什么意义上更安全?窥视和更改
globals
是完全安全的。这完全违反直觉,会引起混乱,但这里没有任何安全问题:-)此外,正如@tobias_k在上面的评论中所说,使用有效任务列表可能更安全<代码>[task0,task1,…]在什么意义上更安全@synchronizer?窥视和更改
全局文件
是完全安全的。这完全违反直觉,会造成混乱,但是,这里没有任何安全问题:-)