Python大小写不敏感程序故障:混合大小写输入未触发预期响应
大小写不敏感编辑器判断程序问题排查
需求与问题
需求是编写一个大小写不敏感的Python程序:
- 持续询问用户使用的编辑器
- 输入
Visual Studio Code(任意大小写组合)时输出“an excellent choice!”并终止程序 - 输入
Word或Notepad(任意大小写组合)时输出“awful” - 其他输入输出“not good”
原代码如下:
mystring = 'Visual Studio Code' mystr2 = 'Notepad' mystr3 = 'word' while True: usr_input = input('Editor:') if mystring in usr_input or mystring.upper() in usr_input or mystring.lower() in usr_input: print('an excellent choice!') break elif mystr2 in usr_input or mystr2.upper() in usr_input or mystr2.lower() in usr_input: print('awful') elif mystr3 in usr_input or mystr3.upper() in usr_input or mystr3.lower() in usr_input: print('awful') else: print('not good')
运行时发现,输入“viSUal STudiO cODe”或“nOtEpAd”这类混合大小写内容时,程序未触发预期输出,反而输出“not good”。
问题原因
你的判断逻辑存在根本性问题:你是在检查固定大小写的目标字符串是否存在于用户输入中,但混合大小写的输入里既不会包含全小写的目标字符串,也不会包含全大写的目标字符串。比如输入“viSUal STudiO cODe”里,找不到“visual studio code”(全小写)或“VISUAL STUDIO CODE”(全大写),所以条件永远不成立。
正确的思路是把用户输入和目标字符串都转换成统一的大小写(比如全小写或全大写),再进行比较,这样就能彻底忽略大小写差异。
修正后的代码
精确匹配版本(输入需完全等于目标字符串,忽略大小写)
# 定义目标字符串的小写版本 target_excellent = 'visual studio code' target_awful = {'notepad', 'word'} while True: # 将输入转为小写并去除首尾空格 usr_input = input('Editor:').strip().lower() if usr_input == target_excellent: print('an excellent choice!') break elif usr_input in target_awful: print('awful') else: print('not good')
包含匹配版本(输入包含目标字符串即触发,忽略大小写)
如果需要支持类似“i use Visual Studio Code”的输入也触发对应逻辑,可以改成包含判断:
target_excellent = 'visual studio code' target_awful = {'notepad', 'word'} while True: usr_input = input('Editor:').strip().lower() if target_excellent in usr_input: print('an excellent choice!') break elif any(awful in usr_input for awful in target_awful): print('awful') else: print('not good')
内容的提问来源于stack exchange,提问作者aditya Verma
相关产品推荐
相关产品推荐

