银行管理需求,正则,time,random,超全注释
import time # time的导包 不导包无法使用time语句
import random # 随机数的导包 不导包无法使用随机数语句
import re # 正则的导包 不导包无法使用正则语句
class Preson(object): #用户类:
def __init__(self):
self.name = ''
self.idNum = ''
self.phoneNum = ''
self.cardNum = ""
self.cardPass_word = ''
self.cardCode = 0
self.money = 0
class Bank(object): #银行类
dict1 = {} #
list1 = [] #
def shuijikahao(self): #生成11位随机卡号
str = "1234567890" #
str1 = ""
while True: # 死循环判断
for x in range(11): # 遍历X 依次拿11个
str1 += random.choice(str) # 随机拿一个数放入 str1字符串里
if str1 not in Bank.list1: # 判断 如果str1没有存在于这个列表里
Bank.list1.append(str1) # 往列表里加入str1
break # 结束循环
return str1 # 返回值
def open(self): #开户方法
per1 = Preson() # 调用Preson类,给类里的变量赋值
while 1: # 死循环姓名输入的条件 1代表True
per1.name = input("请输入姓名(支持数字字母下划线汉字):") # 用户录入
match_obj = re.fullmatch(r"\w+",per1.name) # 写入姓名输入的条件进行判断 \w表示数字 字母 下划线 +表示可以有多个 注意此处不能用* *是0个或者多个 名字不能为0个
if match_obj: # 如果输入正确
break # 结束本次循环 注意 要在这里结束循环,而不是else,因为在else结束就达不到继续重新输入信息了
else: # 如果输入不正确
print("*****名字不合法,请输入正确的姓名*****") # 输出提示语句 继续上去循环
while 1: # 死循环身份证输入的条件
per1.idNum = input("请输入身份证号:") # 用户录入
match_obj = re.fullmatch(r"\d{18}", per1.idNum) # 写入身份证输入的条件进行判断 \d代表仅允许数字 {18}表示数字长度的范围,
if match_obj: # 如果输入正确
break # 结束本次循环
else: # 如果输入不正确
print("*****身份证不合法,请注意输入正确的18位身份证号*****") # 输出提示语句 继续上去循环
while 1: # 死循环密码输入的条件
per1.cardPass_word = input("请输入6位数的数字组合登录密码:") # 用户录入
match_obj = re.fullmatch(r"\d{6}", per1.cardPass_word) # 写入密码输入的条件进行判断 \d代表纯数字 {6}表示数字的长度范围
if match_obj: # 如果输入正确
a = input("请确认登录密码:") # 用户再次录入密码
if a == per1.cardPass_word: # 内判断 判断第一次录入与第二次录入是否一致
break # 结果一致从这里结束循环
else: # 如果输入不正确
print("*****两次密码不一致,请重新开始设置*****") # 输出提示语句 重新开始循环
else: # 如果输入不正确
print("*****请输入正确符合规范的密码*****") # 输出提示语句 重新开始循环
while 1: # 死循环电话输入的条件
per1.phoneNum = input("请输入联系电话(13|15|18)开头:") # 用户录入
match_obj = re.fullmatch("(13|18|15)\d{9}", per1.phoneNum)
# 写入手机号输入的条件进行判断 注意:fullmatch语句写入必须绝对正确 (13|18|15)表示数字的绝对开头 |是或者间隔符 ()是一个分组 {}里输入的数字要适当的减去前面所占的位置
if match_obj: # 如果输入正确
break # 结束本次循环
else: # 如果输入不正确
print("*****请输入正确的电话号码*****") # 输出提示语句 重新开始循环
while True: # True=1 这里与while 1 的用法一致 # 死循环存款输入的条件
per1.money = int(input("请输入预存款金额:")) # 用户录入
if per1.money <= 0: # 如果金额小于等于0
print("预存款金额必须大于0") # 提示语句 继续返回录入循环
else: # 如果if语句判断不正确走这里
break # 结束本次循环 注意break写在这里 因为这里才是判断语句是否正确的地方
c = Bank.shuijikahao(self) # 随机一个银行卡号 找个变量接收 调用上面写好的方法
per1.cardNum = c # 把随机的银行卡号 赋值给用户类里
Bank.dict1[c] = per1 # 把用户类里的数据赋值给bank类里的dict1字典
print(f"开户成功,您的卡号为{c},请牢记您的卡号") # 提示开户成功 返回用户一个卡号
def see(self): #查询方法
a = input("请输入您的卡号")
if a not in Bank.dict1.keys(): #判断是否存在卡号
print("卡号不存在,返回上一级")
time.sleep(1) # 做延时的
return -1 # return表示返回上一级别
if Bank.dict1[a].cardCode >= 3: #判断错误次数是否已有三次
print("已错误3次,卡已被冻结,请解冻后再试")
print("返回上一级...........")
time.sleep(1) # 做延时的
retu