Python使用len()与while循环校验输入时单字符输入仍触发报错
问题原因
你的代码逻辑存在两个明显漏洞,是导致校验失效的直接原因:
- 变量没有同步更新:你只在第一次获取输入后计算了一次
length,进入while循环之后,虽然每次都重新接收了用户的新输入,但从来没有重新计算新输入的长度,length永远保留第一次输入时的数值。一旦第一次输入不符合要求触发了循环,后续哪怕你输入单个符合要求的字母,循环判断用的还是旧的错误长度值,会一直弹出错误提示。 - 循环内缺少校验步骤:你现在的长度判断只在循环启动前执行一次,循环里拿到用户重新输入的内容后,完全没有做合法性校验,等于循环里的输入根本没被检查。
如果你确认第一次输入的确实是单个字母依然触发了错误提示,大概率是输入时不小心带了前后多余的空格这类看不见的字符,导致实际字符串长度大于1。
修复方案
把“接收输入-计算长度-校验合法性”的整套逻辑放进循环内,保证每次用户输入后都会重新做判断,同时可以加一步自动去除输入前后多余空白字符的处理,避免误触空格导致的校验失败:
while True: # 接收输入后自动去掉首尾的空格、制表符等多余空白字符 letter_guess = input("Enter a single letter to guess: ").strip() length = len(letter_guess) # 长度为1时符合要求,跳出循环 if length == 1: break # 不符合要求就提示,进入下一轮输入 print("You entered an invalid amount of letters, please guess again: ")
内容的提问来源于stack exchange,提问作者Hissan
相关产品推荐
相关产品推荐

