Python车牌验证函数始终输出Invalid问题排查求助
Python字符串验证代码修复
你的代码一直输出Invalid,核心问题有两个:
1. 标点检查函数返回值错误
check_ponctuation函数里,你返回的(character in string.punctuation for character in s)是个生成器对象,不是布尔值。生成器在条件判断里永远被视为True,所以check_ponctuation(s) == False永远不成立,直接导致整个验证失败。
把这个函数改成用any()判断,只要有一个字符是标点就返回True:
def check_ponctuation(s): return any(character in string.punctuation for character in s)
2. 函数名拼写错误(非致命但需修正)
你把length_valid写成了lenght_valid(少了个h),虽然当前代码里调用和定义的拼写一致,但属于低级错误,建议修正为正确的length_valid,避免后续维护出错。
可选:补充数字检查(如果规则要求)
如果你的验证规则不允许字符串里有数字,当前代码没做这个检查,可以加个函数:
def has_no_digits(s): return not any(char.isdigit() for char in s)
然后在is_valid里加上这个条件:
def is_valid(s): if length_valid(s) and starts_alpha(s) and not check_ponctuation(s) and has_no_digits(s): return True else: return False
修复后的完整代码
import string def main(): plate = input("Plate: ") print("Valid" if is_valid(plate) else "Invalid") def is_valid(s): return length_valid(s) and starts_alpha(s) and not check_ponctuation(s) def length_valid(s): return 2 <= len(s) <= 6 def starts_alpha(s): return s[:2].isalpha() def check_ponctuation(s): return any(char in string.punctuation for char in s) main()
内容的提问来源于stack exchange,提问作者Elvino Michel
相关产品推荐
相关产品推荐

