尝试创建一个while循环,以测试输入是否正确
while password_length >= MIN_PASSWORD_LENGTH or password_length <= MAX_PASSWORD_LENGTH
我的while循环应该测试密码中的最小长度和最大长度是否满足,如果不是,则用户必须再次输入,但是当我运行代码并输入一个小于最小然后大于一个的密码时,代码仍可运行的最大值。我对还要添加什么感到困惑? Arent我已经要求输入密码长度等于或大于最小长度吗?
答案 0 :(得分:1)
当您使用或时,表示任一侧都对应于True,它将继续。例如:
while password_length >= MIN_PASSWORD_LENGTH or password_length <= MAX_PASSWORD_LENGTH:
# 6 >= 5 OR 6 <=10 $==> True or True
# 1 >= 5 OR 1 <=10 $==> False or True
# 11 >= 5 OR 11 <=10 $==> True or False
因此,在每种情况下都有一个True值,这意味着while循环将永远持续下去。
您需要做的是在其中一个条件不满足时(即其中一个为False时)循环。在这些情况下,您要再次提示:
while not password_length >= MIN_PASSWORD_LENGTH or not password_length <= MAX_PASSWORD_LENGTH
作为改进,可以将其减少到仅此一项:
while not MAX_PASSWORD_LENGTH >= password_length >= MIN_PASSWORD_LENGTH