qq_40994436
cuteyuchen
采纳率33.3%
2019-07-21 18:52 阅读 462
已结题

初学python,一个很简单的ATM系统,出现的问题是退卡不能成功

初学python,一个很简单的ATM系统,出现的问题是退卡不能成功,因为num_6 函数不能返回or_login=False,怎么解决?求大佬们帮忙

#coding=utf-8
#Version:python3.6.3
#Tools:pycharm 2017.3.2
__date__ = '2019/7/20 10:56'
__author__ = 'Yuchen'
# 12、定义一个列表分别存储5个用户账户信息(账号,密码,余额,卡片类型),该列表用来充当临时数据库,通过控制台实现ATM登陆,存款,取款,账户密码修改,账户信息查询,退卡 功能
def return_menu(input_num):
    if input_num==0:
        menu()

def num_1():
    cost_money = int(input('请输入为100倍数的取款金额,返回上级菜单请输入“0”:'))
    return_menu(cost_money)
    while cost_money % 100 != 0 or cost_money < 0:
        cost_money = int(input('输入金额格式错误,请输入为100倍数的取款金额,返回上级菜单请输入“0”:'))
        return_menu(cost_money)
        if cost_money % 100 == 0 and cost_money > 0:
            break
    while cost_money > infors[account_num]["money"]:
        cost_money = int(input('余额不足,请重新输入,返回上级菜单请输入“0”:'))
        return_menu(cost_money)
        if cost_money <= infors[account_num]["money"]:
            break
    infors[account_num]["money"] -= cost_money

def num_2():
    save_money = int(input('请输入为100倍数的存款金额,返回上级菜单请输入“0”:'))
    return_menu(save_money)
    while save_money % 100 != 0 or save_money < 0:
        save_money = int(input('输入金额格式错误,请输入为100倍数的存款金额:'))
        return_menu(save_money)
        if save_money % 100 == 0:
            break
    infors[account_num]["money"] += save_money

def num_3():
    print("余额为:", end=" ")
    print(infors[account_num]["money"])

def num_4():
    print("密码修改")
    password_xiugai = input('请输入将要修改的密码,返回上级菜单请输入“0”:')
    return_menu(password_xiugai)
    infors[account_num]["password"] = password_xiugai
    print("密码修改成功!")

def num_5():
    print("账户信息为:")
    print(infors[account_num])

def nun_6(or_login):
    print('请取卡')
    or_login=False

def menu():
    print('请选择对应的服务项目编号1(取款),2(存款), 3(余额查询), 4(密码修改), 5(账户信息查询), 6(退卡)')
    num = int(input('请输入'))
    if num == 1:
        num_1()
    elif num == 2:
        num_2()
        # print(infors)
    elif num == 3:
        num_3()
    elif num == 4:
        num_4()
    elif num == 5:
        num_5()
    elif num == 6:
        nun_6()
        or_login=False
    else:
        print('编号错误,请重新输入')


infors = [
    {'account':'123', 'password':'123', 'money':10000, 'kind':'金卡'},
    {'account':'222', 'password':'123', 'money':10000, 'kind':'金卡'},
    {'account':'333', 'password':'123', 'money':10000, 'kind':'金卡'}
         ]
list_account=[]
or_login = False
while True:
    password_wrong_count=0
    if not or_login:
        account = input('请输入账号')
        or_exist = False
        for infor in infors:
            if account in list_account:
                print("您的账户已被锁定,请到银行解锁!!!")
                break
            else:
                if infor.get('account') == account:
                    or_exist = True
                    while True:
                        password = input('请输入密码')
                        if infor.get('password') == password:
                            or_login = True
                            account_num = 0
                            for account_num in range(len(infors)):
                                if infors[account_num].get("account") == account:
                                    # print(account_num)
                                    break
                            break
                        else:
                            password_wrong_count+=1
                            if password_wrong_count==3:
                                or_login=False
                                print("输入密码错误超过三次,您的银行卡已经被锁定,请到银行解锁!")
                                list_account.append(account)
                                break
                            else:
                                print('密码错误,请重新输入')
                    break
        if not or_exist:
            print('暂未查到该用户信息')
    else:
       menu()





  • 点赞
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    qq_41251963 乐亦亦乐 2019-07-21 20:10
    def nun_6():
        print('请取卡')
        global or_login
        or_login = False
    

    使用global为函数外变量赋值!

    点赞 1 评论 复制链接分享

相关推荐