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

Python验证类代码异常:重新输入逻辑未触发问题排查求助

Python验证类输入逻辑错误排查

原始代码

class validation():
    confirmation = input("Your information is as above, do you confirm?: E/H: ")
    if confirmation == "E":
        print("You can continue.")
    else:
        wrong_information = input("Which information is wrong: ")
        if wrong_information == name:
            print(input("Enter again: "))
        elif wronglis_information == surname:
            print(input("Enter again: "))
        elif wrong_information == address:
            print(input("Enter again: "))
        elif wronglis_information == il_ilce:
            print(input("Enter again: "))
        elif wronglis_information == population:
            print(input("Enter again: "))
        elif wrong_information == age:
            print(input("Enter again: "))
        elif yanlis_bilgi == phone_number:
            print(input("Enter again: "))
        else:
            print("You have not entered any information or the information you have entered is invalid...")

问题分析

  1. 变量名拼写错误:

    • 多处误写为wronglis_information,正确应为wrong_information
    • 最后一个判断条件里的yanlis_bilgi是土耳其语(意为“错误信息”),未与前面的变量名统一,导致逻辑无法触发
  2. 比较逻辑完全错误:
    用户输入的是字段名称的字符串(比如输入"name"),但代码里是将输入内容和变量name的实际值做比较,而非和字段名的字符串"name"比较,这几乎不可能匹配,直接跳转到else分支。

  3. 类结构不合理:
    把交互逻辑直接写在类的顶层,类定义时就会立即执行所有输入和判断代码,不符合面向对象的使用规范,逻辑应该封装到类的方法中。

  4. 重新输入未更新数据:
    即使触发输入逻辑,也只是打印用户输入的内容,没有将新值赋值给对应的变量,无法实现修正信息的核心功能。

修复后的代码示例

class Validation:
    def __init__(self, user_data):
        # 用字典存储用户数据,便于通过字段名直接修改
        self.user_data = user_data

    def validate(self):
        while True:
            confirmation = input("Your information is as above, do you confirm?: E/H: ")
            if confirmation == "E":
                print("You can continue.")
                return self.user_data
            else:
                wrong_field = input("Which information is wrong (enter field name like name/surname): ")
                if wrong_field in self.user_data:
                    new_value = input(f"Enter correct {wrong_field}: ")
                    self.user_data[wrong_field] = new_value
                    print(f"{wrong_field} updated successfully.")
                else:
                    print("Invalid field name, please enter again.")

# 使用示例
user_info = {
    "name": "Onur",
    "surname": "Doe",
    "address": "Example St. 123",
    "il_ilce": "Istanbul/Beşiktaş",
    "population": "1000000",
    "age": "28",
    "phone_number": "555-1234"
}

validator = Validation(user_info)
updated_user_data = validator.validate()

修复说明

  • 改用字典存储用户数据,通过字段名字符串直接定位修改项,匹配用户输入逻辑
  • 将验证逻辑封装到validate()方法中,符合类的使用规范
  • 统一变量名,修正拼写错误
  • 新增循环机制,支持用户多次修改直到确认无误
  • 实际更新用户数据,而非仅打印输入内容

内容的提问来源于stack exchange,提问作者Onur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:05:17