Python3列表比较逻辑错误:合法字符输入却提示非法
问题分析与代码修改
原代码的核心问题是判断逻辑错误:你把输入字符串转成了列表x,然后直接判断这个整个列表是否在白名单里,但白名单里都是单个字符,列表和单个字符永远不可能相等,所以不管输入什么,都会触发Incorrect letters的提示。
要实现“所有字符都属于白名单”的判断,需要检查输入字符串的每一个字符是否都在白名单中,以下是两种可行的修改方案:
方案1:使用all()函数(简洁高效)
all()函数会检查迭代器里的所有元素是否都为True,正好符合我们的需求:
whitelist = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P'] word = input('Password ') # 检查所有字符都在白名单中 if all(c in whitelist for c in word): print('Correct ') else: print('Incorrect letters')
方案2:逐个字符遍历检查(适合新手理解)
手动遍历每个字符,遇到不在白名单里的就标记错误:
whitelist = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P'] word = input('Password ') is_valid = True for c in word: if c not in whitelist: is_valid = False break if is_valid: print('Correct ') else: print('Incorrect letters')
另外,原代码里的split函数完全多余,因为list(word)直接就能把字符串转成字符列表,而且我们的判断逻辑根本不需要转列表,直接遍历字符串即可。
内容的提问来源于stack exchange,提问作者Sigma_Senior
相关产品推荐
相关产品推荐

