You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:09:18