使用if ... not in和len()检查不适用

时间:2016-04-08 14:50:16

标签: python

我尝试在此代码中添加验证检查,以便只允许值("A"), ("B") or ("C")。如果删除len()部分,则允许使用包含三个字母之一的任何字符串,但如果未使用其中一个字母,则按预期工作。添加len()时,即使len()打印正确的值,它似乎也没有效果,只是绕过它。

如何解决此问题?

谢谢!

classCheck = False
studentclass=input("What class are you in?\n A\n B\n C\n ")
print (len(studentclass))
while classCheck != True:
    if ("a" or "b" or "c") not in studentclass.lower() and len(studentclass) != 1:
        print ("You must enter a valid class")
        studentclass=input("What class are you in?\n A\n B\n C\n ")
    else:
        classCheck = True

2 个答案:

答案 0 :(得分:1)

我认为您打算使用if studentclass.lower() not in ["a", "b", "c"]

编辑:如果你想要一个(在这种情况下可以忽略不计)增加速度使用("a", "b", "c")分配给一个元组比一个列表更快,则每个注释。

答案 1 :(得分:1)

你可以这样做:

classCheck = False
studentclass=input("What class are you in?\n A\n B\n C\n ")
print (len(studentclass))
while classCheck != True:
    if studentclass.lower() not in ['a', 'b', 'c']:
        print ("You must enter a valid class")
        studentclass=input("What class are you in?\n A\n B\n C\n ")
    else:
        classCheck = True

你的解决方案不起作用,因为Python不会说英语而是Python,所以当你这样做时:

("a" or "b" or "c") not in studentclass.lower()

第一次评估:

("a" or "b" or "c")

哪个返回第一个表达式,每个表达式bool(expr)== True所以这里导致“a”然后Python评估:

"a" not in studentclass.lower()

对于'b'或'c'

是正确的