目录
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键,它可以让我们的多行字符串进行对齐