Python简单while循环实现邮编校验不生效,如何修复?
邮编校验程序修复方案
原代码核心问题
- 循环条件逻辑错误:原
while num == False and letter == False代表「仅当未检测到数字且未检测到字母时才循环」,只要任意一个类型被检测到就会终止循环,和「需同时包含字母和数字才终止」的需求完全不符。 - 方法调用遗漏括号:
i.isalpha、i.isdigit是字符串内置方法,不加括号时判断的是方法对象本身,布尔值恒为True,无论字符类型都会触发赋值逻辑。 - 状态变量未重置:
num和letter的初始化放在循环外部,第一次输入赋值为True后就不会再恢复为False,后续输入的校验逻辑完全失效。
修复后代码
while True: # 每次输入前重置状态标记 has_num = False has_letter = False postcode = input("what is your postcode? ") for char in postcode: if char.isalpha(): has_letter = True if char.isdigit(): has_num = True # 同时满足两个条件则跳出循环 if has_num and has_letter: break
逻辑说明
调整后的代码每次索要输入前都会重置状态标记,遍历输入字符时正确调用方法判断字符类型,遍历完成后才做终止校验,只有同时检测到数字和字母才会结束程序,否则自动进入下一轮输入询问。
内容的提问来源于stack exchange,提问作者Nootnoot5
相关产品推荐
相关产品推荐

