Python中如何通过按下ENTER键退出input输入校验的while循环
问题根因
ENTER键触发input()返回的结果确实是空字符串"",无法退出循环的问题出在你的校验逻辑写法上:
你写的any(x in tfend.keys() for x in tf_end)是遍历输入字符串的每个单个字符去匹配字典键,当输入为空字符串时,遍历没有可迭代的元素,any()对空迭代器会直接返回False,因此not False的判断结果为真,循环会持续运行。
另外额外说明:input()本身返回的就是字符串类型,不需要额外套str()做转换,属于冗余代码可以删除。
修复方案
你要的是整个输入内容匹配字典键的校验逻辑,不需要遍历每个字符,直接修改循环判断条件即可:
tf_end = input("TF end: ") tfend = {"":7,'1':0,'2':1,'3':2,'5':3,'10':4,'15':5,'30':6,'1h':7} # 直接判断整个输入是否在字典键中即可 while tf_end not in tfend: tf_end = input("TF end: ")
修改后按下ENTER返回空字符串"",会直接匹配到字典中的""键,判断为假直接退出循环,符合你的预期。
特殊场景兼容(可选)
如果你确实需要保留「输入内容包含任意一个字典键即可通过校验」的逻辑,只需要在判断条件中额外加空字符串的匹配分支即可:
while not (tf_end == "" or any(x in tfend.keys() for x in tf_end)): tf_end = input("TF end: ")
内容的提问来源于stack exchange,提问作者uyin
相关产品推荐
相关产品推荐

