我有一个函数需要验证作为字符串传递给它的 pin。 pin 不能为负数,不能有字母,不能全为零,不能有特殊字符,长度必须为 4 或 6 位数字。这是我为此编写的函数:
def validate_pin(pin):
valid = False
if str.isdigit(pin):
if int(pin) > 0 and len(pin) == 4 or len(pin) == 6:
valid = True
return valid
除了字符串全为零(如“000000”)之外,该函数工作正常,但我不明白为什么。
请您参考如下方法:
问题是operator precedence . or 的优先级低于 and,因此如果 len(pin ) == 6,不管条件语句的第一部分发生了什么。
代码基本上说:
if (int(pin) > 0 and len(pin) == 4) or len(pin) == 6:
但你的意思是:
if int(pin) > 0 and (len(pin) == 4 or len(pin) == 6):
