本文目录导读:

- 1️⃣ 最简单的控制台登录(硬编码用户名密码)
- 2️⃣ 带循环和次数限制(防止暴力尝试)
- 3️⃣ 使用字典存储多个用户
- 4️⃣ 文件存储用户信息(持久化)
- 5️⃣ 密码加密存储(安全版本)
- 6️⃣ 综合版(推荐用于练习项目)
- 不同使用场景推荐
下面给你几个用户登录的 Python 案例,从最简单的控制台版本一直到带数据库和密码加密的版本,你可以直接复制运行或者扩展成自己的项目。
1️⃣ 最简单的控制台登录(硬编码用户名密码)
适合刚学完 input / if 语句的同学。
# 硬编码的用户名和密码
USERNAME = "admin"
PASSWORD = "123456"
print("===== 用户登录 =====")
username = input("用户名:")
password = input("密码:")
if username == USERNAME and password == PASSWORD:
print("✅ 登录成功!欢迎回来,", username)
else:
print("❌ 用户名或密码错误")
2️⃣ 带循环和次数限制(防止暴力尝试)
加入 while 循环,最多试 3 次。
USERNAME = "admin"
PASSWORD = "123456"
max_attempts = 3
for attempt in range(1, max_attempts + 1):
print(f"\n第 {attempt} 次登录尝试")
username = input("用户名:")
password = input("密码:")
if username == USERNAME and password == PASSWORD:
print("✅ 登录成功!")
break
else:
print(f"❌ 登录失败,剩余 {max_attempts - attempt} 次机会")
else:
print("⚠️ 超过最大尝试次数,已锁定。")
3️⃣ 使用字典存储多个用户
不用硬编码,适合管理少量用户。
users = {
"alice": "pass123",
"bob": "bob2020",
"admin": "root"
}
username = input("用户名:")
password = input("密码:")
if username in users and users[username] == password:
print("✅ 登录成功!")
else:
print("❌ 用户名或密码错误")
4️⃣ 文件存储用户信息(持久化)
把用户数据存在 users.txt,每行格式:username:password
import os
def load_users(filename="users.txt"):
users = {}
if os.path.exists(filename):
with open(filename, "r") as f:
for line in f:
line = line.strip()
if ":" in line:
u, p = line.split(":", 1)
users[u] = p
return users
def register_user(username, password, filename="users.txt"):
with open(filename, "a") as f:
f.write(f"{username}:{password}\n")
print("✅ 注册成功!")
users = load_users()
if not users:
print("还没有用户,请先注册一个。")
new_user = input("新用户名:")
new_pass = input("密码:")
register_user(new_user, new_pass)
users = load_users()
username = input("用户名:")
password = input("密码:")
if username in users and users[username] == password:
print("✅ 登录成功!")
else:
print("❌ 登录失败")
5️⃣ 密码加密存储(安全版本)
使用 hashlib 对密码进行 SHA256 加密,不保存明文密码。
import hashlib
import json
import os
PASSWORD_FILE = "users_secure.json"
def hash_password(password):
return hashlib.sha256(password.encode()).hexdigest()
def load_users():
if os.path.exists(PASSWORD_FILE):
with open(PASSWORD_FILE, "r") as f:
return json.load(f)
return {}
def save_users(users):
with open(PASSWORD_FILE, "w") as f:
json.dump(users, f, indent=2)
def register():
users = load_users()
username = input("新用户名:")
if username in users:
print("❌ 用户名已存在")
return
password = input("密码:")
users[username] = hash_password(password)
save_users(users)
print("✅ 注册成功(密码已加密存储)")
def login():
users = load_users()
username = input("用户名:")
password = input("密码:")
if username in users and users[username] == hash_password(password):
print("✅ 登录成功!")
else:
print("❌ 用户名或密码错误")
# 主菜单
while True:
print("\n1. 注册 2. 登录 3. 退出")
choice = input("请选择:")
if choice == "1":
register()
elif choice == "2":
login()
elif choice == "3":
break
else:
print("无效输入")
6️⃣ 综合版(推荐用于练习项目)
结合了 文件 + 加密 + 注册 + 登录 + 次数限制。
import hashlib
import json
import os
USER_FILE = "users_data.json"
def encrypt(pwd):
return hashlib.sha256(pwd.encode()).hexdigest()
def load():
if os.path.exists(USER_FILE):
with open(USER_FILE, "r") as f:
return json.load(f)
return {}
def save(db):
with open(USER_FILE, "w") as f:
json.dump(db, f, indent=2)
def register():
db = load()
u = input("新用户名:")
if u in db:
print("用户名已存在")
return
p1 = input("密码:")
p2 = input("再次输入密码:")
if p1 != p2:
print("两次密码不一致")
return
db[u] = encrypt(p1)
save(db)
print("注册成功!")
def login():
db = load()
u = input("用户名:")
p = input("密码:")
if u in db and db[u] == encrypt(p):
print("登录成功!")
return True
else:
print("用户名或密码错误")
return False
def main():
while True:
print("\n1. 注册 2. 登录 3. 退出")
c = input("选择:")
if c == "1":
register()
elif c == "2":
login()
elif c == "3":
break
else:
print("无效输入")
if __name__ == "__main__":
main()
不同使用场景推荐
| 场景 | 推荐案例 |
|---|---|
| 小白练习 | 案例 1、2 |
| 教学演示 | 案例 3、4 |
| 小型项目 | 案例 5(加密文件) |
| 需要注册功能 | 案例 6(综合版) |
如果你还需要 GUI 版本(Tkinter)或 Web 版本(Flask),也可以告诉我,我可以继续帮你写。