python函数综合案例(基础)-银行ATM基础操作,在控制台模拟ATM的行为

目录

1. 案例需求:

2. 效果展示:

3. 学习目标:

4. 写代码:

4.1 定义全局变量

4.2 定义查询函数

4.3 定义存款函数

4.4 定义取款函数

4.5 定义主菜单函数

4.6 设置无限循环,确保程序不退出

5. 整体代码:

6. 我写的代码以及遇到的问题:

遇到的问题:

7. 补充知识点:

7.1 global关键字:

 7.2 python中对齐内容


1. 案例需求:

实现ATM基础操作,在控制台模拟ATM的行为;包含:主菜单效果,查询余额效果,存、取款效果
    ①定义一个全局变量:money,原来记录银行卡余额(默认50000)
    ②定义一个全局变量:name,用来记录客户姓名(启动程序时输入)
    ③定义如下函数:

  •         查询余额函数
  •         存款函数
  •         取款函数
  •         主菜单函数

    ④要求:

  •         程序启动后要求输入客户姓名
  •         查询余额、存款、取款后都会返回主菜单
  •         存款、取款后,都应显示一下当前余额
  •         客户选择退出或输出错误,程序会退出,否则一直运行

2. 效果展示:

3. 学习目标:

自我学习做记录。内容来自黑马程序员的Python教程

4. 写代码:

4.1 定义全局变量

# 定义全局变量money,name
money = 50000
# 要求客户输入姓名
name = input("请输入您的姓名")

4.2 定义查询函数

# 定义查询函数
def query():
    print("------------查询余额------------")
    print(f"{name},您好,您的余额为:{money}元")

4.3 定义存款函数

# 定义存款函数
def saving(num):
    global money     # money在函数内部定义为全局变量
    money += num 
    print("------------存款------------")
    print(f"{name},您好,您存款{num}元成功")
    
    # 调用query函数查询余额
    query()

       问:但此时如果直接调用query(),会输出查询函数的两行内容,如何设置调用时不输出

------------查询余额------------   ?

       答:我们可以通过参数进行控制。定义一个show_header的参数,它会传布尔值,如果True,打印;如果False,不打印

# 查询函数
def query(show_header):
    if show_header:
        print("------------查询余额------------")
    print(f"{name},您好,您的余额为:{money}元")
    # 调用query函数查询余额
    query(False)

4.4 定义取款函数

# 定义取款函数
def get_money(num):
    global money     # money在函数内部定义为全局变量
    money -= num
    print("------------取款------------")
    print(f"{name},您好,您取款{num}元成功")

    # 调用query函数查询余额
    query(False)

4.5 定义主菜单函数

# 定义主菜单函数
def main():
    print("------------主菜单------------")
    print(f"{name},你好,欢迎来到银行ATM,请选择操作:")
    print("查询余额\t[输入1]")
    print("存款\t\t[输入2]")   # \t一个不够就来两个
    print("取款\t\t[输入3]")
    print("退出\t\t[输入4]")
    # 这里需要接收输入的数据,不接收直接return返回出去
    return input("请输入你的选择:")

4.6 设置无限循环,确保程序不退出

# 设置无限循环,确保程序不退出
while True:
    # 通过变量keyboard_input接收键盘输入值
    keyboard_input = main()
    # 拿到之后开始判断
    if keyboard_input == "1":
        # 单独的查询,需要输出标头
        query(True)
        # 要求每一步操作后返回主菜单
        continue     # 通过continue,结束本次循环,进行下一次循环
    elif keyboard_input == "2":
        # 先询问要存多少钱
        num = int(input("您想要存多少钱,请输入:"))
        saving(num)
        continue
    elif keyboard_input == "3":
        # 先询问要取多少钱
        num = int(input("您想要取多少钱,请输入:"))
        get_money(num)
        continue
    else:
        print("程序已退出")
        break     # 通过break,退出循环

5. 整体代码:

# 定义全局变量money,name
money = 50000
# 要求客户输入姓名
name = input("请输入您的姓名:")

# 定义查询函数
def query(show_header):
    if show_header:
        print("------------查询余额------------")
    print(f"{name},您好,您的余额为:{money}元")

# 定义存款函数
def saving(num):
    global money     # money在函数内部定义为全局变量
    money += num
    print("------------存款------------")
    print(f"{name},您好,您存款{num}元成功")

    # 调用query函数查询余额
    query(False)

# 定义取款函数
def get_money(num):
    global money     
    money -= num
    print("------------取款------------")
    print(f"{name},您好,您取款{num}元成功")

    # 调用query函数查询余额
    query(False)

# 定义主菜单函数
def main():
    print("------------主菜单------------")
    print(f"{name},你好,欢迎来到银行ATM,请选择操作:")
    print("查询余额\t[输入1]")
    print("存款\t\t[输入2]")   
    print("取款\t\t[输入3]")
    print("退出\t\t[输入4]")
    return input("请输入你的选择:")

# 设置无限循环,确保程序不退出
while True:
    keyboard_input = main()

    if keyboard_input == "1":
        query(True)
        continue    
    elif keyboard_input == "2":
        num = int(input("您想要存多少钱,请输入:"))
        saving(num)
        continue
    elif keyboard_input == "3":
        num = int(input("您想要取多少钱,请输入:"))
        get_money(num)
        continue
    else:
        print("程序已退出")
        break  

6. 我写的代码以及遇到的问题:

我写的代码以及效果展示:

money = 50000
name = input("请输入您的姓名:")
num = 1

# 查询余额函数
def sum():
    x = money
    print(f"{name},您好,您的当前余额为:{x}")
    print("输入0回到主菜单")
    num = input("请输入:")
    num = int(num)
    if num == 0:
        menu()
    else:
        print("已退出,欢迎下次光临")

# 存款效果
def add():
    global money
    x = input("请输入存款金额:")
    x = int(x)
    print(f"{name},您好,您存款{x}成功")
    y = money+x
    print(f"{name},您好,您的余额剩余:{y}")
    money = y
    print("输入0回到主菜单")
    num = input("请输入:")
    num = int(num)
    if num == 0:
        menu()
    else:
        print("已退出,欢迎下次光临")

# 取款效果
def sub():
    global money
    x = input("请输入取款金额:")
    x = int(x)
    y = money - x
    if y >= 0:
        print(f"{name},您好,您取款{x}成功")
        print(f"{name},您好,您的余额剩余:{y}")
    else:
        y = money
        print("取出金额过大,不支持")
    money = y
    print("输入0回到主菜单")
    num = input("请输入:")
    num = int(num)
    if num == 0:
        menu()
    else:
        print("已退出,欢迎下次光临")

# 主菜单函数
def menu():
    print("--------主菜单--------")
    print(f"{name},你好,欢迎来到银行ATM,请选择操作:")
    print("查询余额\t[输入1]")
    print("存款\t\t[输入2]")
    print("取款\t\t[输入3]")
    print("退出\t\t[输入4]")
    global num
    num = input("请输入您的选择:")
    num = int(num)
    if num == 1:
        sum()
    elif num == 2:
        add()
    elif num == 3:
        sub()
    elif num == 4:
        print("已退出,欢迎下次光临")
    else:
        print("程序出错,输入0回到主菜单")
        num1 = input("请输入:")
        num1 = int(num1)
        if num1 == 0:
            menu()
        else:
            print("已退出,欢迎下次光临")
menu()

 

 

遇到的问题:

①函数的顺序问题,要先写出来,才能调用
②我的代码中,我的if语句最开始写在外面,只执行了一次,不能再次执行
③最开始我写的时候,存款和取款不能联系起来,只能单独独立存在,如何获得money的值并更新:在函数开头使用global关键字

④我设置了一个取款金额过大不行的步骤,需要把money的原始值还给它,不然存款会变成负数

(没有返回时)

y = money - x
    if y >= 0:
        print(f"{name},您好,您取款{x}成功")
        print(f"{name},您好,您的余额剩余:{y}")
    else:
        y = money
        print("取出金额过大,不支持")

7. 补充知识点:

7.1 global关键字:

"""
global关键字:在函数内部声明变量为全局变量

# 在函数内直接修改全局变量,不可行
num = 200

def test1():
    print(f"test1:{num}")

def test2():
    num = 500
    print(f"test2:{num}")

test1() # test1:200
test2() # test2:500,变成了局部变量
print(num) # 200
"""

# 在函数内修改全局变量
num = 200

def test1():
    print(f"test1:{num}")

def test2():
    global num # 设置内部定义的变量为全局变量
    num = 500
    print(f"test2:{num}")

test1() # test1:200
test2() # test2:500
print(num) # 500

 7.2 python中对齐内容

制表符\t,效果等于在键盘上按下:tab键,它可以让我们的多行字符串进行对齐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值