isalpha()校验与多while循环逻辑错误:输入'y'触发异常提示
问题排查与修复方案
错误原因
在特殊字符选择的while循环中,你把**用户输入变量special_characters_2和全局定义的特殊字符列表special_characters**搞混了:
# 错误代码 if special_characters == 'y':
这里应该判断的是用户输入的special_characters_2是否等于'y',而不是列表special_characters。因为special_characters是一个包含特殊符号的列表,永远不可能等于字符串'y',所以输入'y'时会直接进入else分支,触发错误提示。
另外原代码里还有几处拼写错误(比如"Invail"应该是"Invalid"),以及部分缩进问题,一并修正。
修复后的完整代码
import string alphabets = list(string.ascii_letters) digits = list(string.digits) special_characters = list("!@#$%^&*()") PasswordCharacters = [] a = True while a: x = True y = True z = True while x: alphabets_2 = input("Would you like to include letters in your password?: ") if alphabets_2.isalpha(): if alphabets_2 == "y": PasswordCharacters.append(alphabets) x = False elif alphabets_2 == 'n': x = False else: print("Invalid Input, Try Again! not y or n") else: print("Invalid input! Try again, not a letter") continue while y: digits_2 = input("Would you like to include digits in your password?: ") if digits_2.isalpha(): if digits_2 == 'y': PasswordCharacters.append(digits) y = False elif digits_2 == 'n': y = False else: print("Invalid Input, Try Again! not y or n") else: print("Invalid input! Try Again! not a letter") continue while z: special_characters_2 = input("would you like to include special characters in your password?: ") if special_characters_2.isalpha(): # 修正:将special_characters改为special_characters_2 if special_characters_2 == 'y': PasswordCharacters.append(special_characters) z = False elif special_characters_2 == 'n': z = False else: print("Invalid input, Try again! not y or n") else: print("Invalid input, Try again! not a letter") continue a = False
额外优化建议
- 可以把重复的输入校验逻辑封装成函数,避免代码冗余,比如写一个
get_yes_no_input(prompt)函数来处理所有y/n的输入判断。 - 注意输入的大小写问题,比如用户输入'Y'或'N'也应该被识别,可以把输入转成小写后再判断:
alphabets_2 = input(...).lower()
内容的提问来源于stack exchange,提问作者Mr.IDK
相关产品推荐
相关产品推荐

