Bài 29
Đề bài: Viết chương trình xử lý nhieu kieu lỗi cung luc.
Mô phỏng he thong dang nhập: kiểm tra ten và mat khau.
Xử lý: truong rong, qua ngan, sai mat khau, tai khoan bi khoa.
Ví dụ:
Ten = "" => Loi: Ten dang nhập không được de trong
Ten = "ab" => Loi: Ten phải có it nhat 3 ky tu
Mat khau sai 3 lan => Tai khoan bi khoa tam thoi
Đăng nhập để giáo viên có thể giao bài và nhận bài nộp của bạn.
Câu trả lời
TAI_KHOAN = {
"admin": {"mat_khau": "Admin@123", "bi_khoa": False},
"hocsinh": {"mat_khau": "Hoc@2024", "bi_khoa": False}
}
LAN_DANG_NHAP_SAI = {}
def dang_nhap(ten, mat_khau):
# Kiem tra truong rong
if not ten.strip():
raise ValueError("Ten dang nhap khong duoc de trong")
# Kiem tra do dai
if len(ten) < 3:
raise ValueError("Ten phai co it nhat 3 ky tu")
# Kiem tra ton tai
if ten not in TAI_KHOAN:
raise KeyError(f"Tai khoan '{ten}' khong ton tai")
# Kiem tra bi khoa
if TAI_KHOAN[ten]["bi_khoa"]:
raise PermissionError(f"Tai khoan '{ten}' dang bi khoa")
# Kiem tra mat khau
if TAI_KHOAN[ten]["mat_khau"] != mat_khau:
LAN_DANG_NHAP_SAI[ten] = LAN_DANG_NHAP_SAI.get(ten, 0) + 1
if LAN_DANG_NHAP_SAI[ten] >= 3:
TAI_KHOAN[ten]["bi_khoa"] = True
raise PermissionError(f"Sai qua 3 lan! Tai khoan '{ten}' da bi khoa")
raise ValueError(f"Sai mat khau! Con {3 - LAN_DANG_NHAP_SAI[ten]} lan thu")
return True
# Vong lap dang nhap
for _ in range(5):
try:
ten = input("\nTen dang nhap: ")
mat_khau = input("Mat khau: ")
if dang_nhap(ten, mat_khau):
print(f"Dang nhap thanh cong! Chao {ten}!")
break
except ValueError as e:
print(f"Loi nhap lieu: {e}")
except KeyError as e:
print(f"Loi tai khoan: {e}")
except PermissionError as e:
print(f"Loi quyen truy cap: {e}")
break