Python登录程序运行方法及代码优化咨询
问题分析与解决方案
一、实例化失败的核心原因
你的代码存在两个关键拼写错误,直接导致实例化和运行失败:
- 类构造函数名称错误:
__int__应为__init__,Python类的初始化方法必须严格命名为__init__,否则无法正确初始化实例属性。 - 登录方法名称拼写错误:
loginProgrma应为loginProgram(拼写错误不影响实例化,但调用方法时会触发AttributeError)
二、修正后的可运行代码
import sys as s import datetime class LoginPage: def __init__(self, username, password): self.username = username self.password = password self.incorrectPass = 0 def loginProgram(self): while True: # 用户名输入校验 while True: nameInput = input("Enter your username: ➸ ") if nameInput != self.username: print(" (Username is incorrect. Re-enter your username)") else: print(" (Enter your password)") break # 密码输入校验 while True: passInput = input("Enter your password: ➳ ") if passInput != self.password: self.incorrectPass += 1 print(" (Incorrect password. Re-enter your password)") if self.incorrectPass == 3: s.exit('\nYou have been locked!') else: break login_time = datetime.datetime.now() print(f'You logged in at {login_time}') return f"\n (Welcome back {nameInput}.)"
三、正确运行步骤
在代码末尾添加实例化和调用逻辑:
# 替换为你预设的用户名和密码 if __name__ == "__main__": login_page = LoginPage("my_user", "my_pass123") result = login_page.loginProgram() print(result)
运行脚本后,按照提示输入用户名和密码即可完成登录流程。
四、代码优化建议
1. 隐藏密码输入
使用getpass模块替代input(),避免密码明文显示:
import getpass # 替换密码输入部分 passInput = getpass.getpass("Enter your password: ➳ ")
2. 简化嵌套结构
合并冗余循环,降低代码复杂度,同时重置密码错误次数(当用户重新输入正确用户名时):
def loginProgram(self): while True: nameInput = input("Enter your username: ➸ ").strip() if not nameInput: print(" (Username cannot be empty. Please enter again.)") continue if nameInput != self.username: print(" (Username is incorrect. Re-enter your username)") continue # 用户名正确时重置密码错误次数 self.incorrectPass = 0 print(" (Enter your password)") while self.incorrectPass < 3: passInput = getpass.getpass("Enter your password: ➳ ").strip() if not passInput: print(" (Password cannot be empty. Please enter again.)") continue if passInput == self.password: login_time = datetime.datetime.now() print(f'You logged in at {login_time}') return f"\n (Welcome back {nameInput}.)" self.incorrectPass += 1 remaining = 3 - self.incorrectPass print(f" (Incorrect password. {remaining} attempts left.)") s.exit('\nYou have been locked!')
3. 优化提示信息可读性
统一提示风格,用更直观的符号区分状态:
print("❌ Username is incorrect. Please re-enter.") print("✅ Username verified. Please enter your password.") print(f"⚠️ Incorrect password. {remaining} attempts left.")
内容的提问来源于stack exchange,提问作者Huzi
相关产品推荐
相关产品推荐

