银行ATM机工作流程
# 定义方法business(n),n为卡号下标
def business(n):
times[card[card.index(card_No)]] = 3 # 将当前卡号的密码输入次数重置为3次
print("登录成功!当前账户余额为:%s" % (money[card[n]])) # 提示用户当前余额
for a in range(101): # 共执行100次循环体
if a == 100: # 当执行到第100次时,次数达到上限,自动退卡
print("连续操作次数已达上限,即将自动退卡!")
break
num = int(input("1.存款 2.取款 3.退卡\n请输入您要办理的业务序号:"))
if num == 1: # 存款算法
money_add = int(input("请输入整数存款金额:"))
money[card[n]] += money_add
print("存款成功!当前余额为:" + str(money[card[n]]) + "元")
elif num == 2: # 取款算法
money_div = int(input("请输入整数取款金额:"))
if money_div > money[card[n]]:
print("余额不足!")
else:
money[card[n]] -= money_div
print("取款成功!当前余额为:" + str(money[card[n]]) + "元")
elif num == 3: # 退卡:提示用户并结束循环
print("退卡成功!")
break
else: # 提示用户输入序号不正确
print("您输入的业务序号不正确!")
# 银行ATM系统工作流程
card = 1001, 1002, 1003 # 定义元组:储存用户卡号
password = {card[0]: 159632, card[1]: 147852, card[2]: 520229} # 定义字典:储存每个卡号对应的密码
money = {card[0]: 15472, card[1]: 8351, card[2]: 12487} # 定义字典:储存每个卡号对应的余额
times = {card[0]: 3, card[1]: 3, card[2]: 3} # 定义字典:每张卡连续输入错误次数默认为3
frozen = {card[0]: False, card[1]: False, card[2]: False} # 定义字典:储存每张卡对应的初始冻结状态为否
while True: # 无限执行循环体
card_No = int(input("请输入4位数银行卡号:"))
if card_No in card: # 判断用户输入的卡号是否存在
if frozen[card[card.index(card_No)]]: # 判断用户输入的卡号是否处于冻结状态
print("您的账户已锁定!详情请持本人相关证件前往本行柜台咨询!")
else:
while times[card[card.index(card_No)]] < 4: # 控制用户输入密码不需要重新输入银行卡号,且输入密码次数为3次
password_No = int(input("请输入密码:"))
if password_No == password[card[0]] and card_No == card[0]: # 判断用户输入的密码是否为对应卡号的密码
business(0) # 执行business(n)方法
break
elif password_No == password[card[1]] and card_No == card[1]:
business(1)
break
elif password_No == password[card[2]] and card_No == card[2]:
business(2)
break
else:
times[card[card.index(card_No)]] -= 1 # 将当前卡号的密码剩余输入次数减1
if times[card[card.index(card_No)]] == 0: # 若当前卡号的密码剩余输入次数为0时,将对应的冻结状态设置为True
frozen[card[card.index(card_No)]] = True
print("您已连续输错3次密码,账户已自动锁定!详情请前往本行柜台咨询!")
break
print("密码错误!您还剩余%d次输入机会!" % times[card[card.index(card_No)]])
else:
print("您输入的卡号不正确或不存在,请核对后输入!")