Python 3.x 为什么不是';t while循环wokring package=输入(“输入包名称a、B、C:”) 当包装“或包裹!”“或包裹!”b'或包装!='B'或包装!='c'或包!='C': 打印(“Erorr:您没有输入有效的包”) 包装=输入(“输入包装名称a、B、C:”)

Python 3.x 为什么不是';t while循环wokring package=输入(“输入包名称a、B、C:”) 当包装“或包裹!”“或包裹!”b'或包装!='B'或包装!='c'或包!='C': 打印(“Erorr:您没有输入有效的包”) 包装=输入(“输入包装名称a、B、C:”),python-3.x,Python 3.x,每次我输入字母a-c或a-c时,编译器都会卡在while循环中,即使我继续重新输入值,代码说是这样,只要包不等于这些值,由于或s,条件总是True。 将所有条件放在一个简单的条件语句中可以解决这个问题 package = str(input("Enter a package designation A,B, C: ")) while package.lower() not in ['a','b','c']: print("Erorr:you didn't e

每次我输入字母a-c或a-c时,编译器都会卡在while循环中,即使我继续重新输入值,代码说是这样,只要包不等于这些值,由于
s,条件总是
True
。 将所有条件放在一个简单的条件语句中可以解决这个问题

package = str(input("Enter a package designation A,B, C: "))
while package.lower() not in ['a','b','c']:
    print("Erorr:you didn't enter a valid package")
    package = str(input("Enter a package designation A,B, C: "))

这有一个很好的理由

让我在下面解释一下,这样我就可以让你轻松一点

每次你写信时,条件都是真实的。 但为什么呢

让我们一起调试:
package=输入(“输入包装名称a、B、C:”)

我们以字母
“c”

package-True

package!='b'或包装!='B'==>True

package!='c'或包!='C'=>True
但请稍候。。这怎么可能呢

好的
package!=“c”=>False
但是
包!='C'=>True

那么这种情况的结果是什么呢正确

这是因为如果其中一个条件为True,or语句将返回True

这就是你陷入无休止循环的原因

解决方案:

package = input("Enter a package designation A,B, C: ")
letters = "abcABC"

while package not in letters:
    print("Erorr:you didn't enter a valid package")
    package = input("Enter a package designation A,B, C: ")
你应该知道这个问题有更好的解决方案,但我想采用更简单的方法


无论如何,希望这能有所帮助。

请编辑您的问题。关于它的一切都是草率的。没有任何
str
值用于
package!='“或包裹!”“
(扩展为检查的其余部分)可能是真的。考虑一下你认为哪一个值满足这一点,并检查它的表达式。我同意这个问题不是很好,但是直接你的逻辑是有缺陷的,因为你的while循环总是正确的。用“A”完成它。这不等于“a”,所以你得到了真的,你的OR已经满足并且是真的,所以继续循环。您需要使用和,但类似于不在[“A”、“B”、“C”]中的while package.upper()会更具可读性。感谢您的所有评论和帮助。