B站python入门学习(三)函数

#函数

函数是组织好的,可重复使用(调用)的,用来实现特定功能的代码段。

"""
不使用内置函数len(),统计字符串长度的计算
"""
def myfunc_len(s):
    count = 0
    for c in s:
        count += 1
    print(f"字符串{s}的长度是{count}。")
    return count

str1 = "itheima"
str2 = "python"
myfunc_len(str1)
myfunc_len(str2)

 函数说明文档的标准写法

def add(x, y):
    """
    add函数可以接受两个参数,进行两数相加的功能
    :param x: 形参x表示相加的一个数
    :param y: 形参y表示相加的另外一个数
    :return: 返回值是x和y两数相加的结果
    """
    result = x + y
    print(f"两数相加结果是{result}。")
    return result

函数的嵌套调用

#定义函数func_b
def func_b():
    print("-----2-----")

#定义函数func_a,并在内部调用func_b
def func_a():
    print("-----1-----")
    #嵌套调用func_b
    func_b()

    print("-----3-----")

#调用函数func_a
func_a()

变量的作用域

局部变量是定义在函数体内部的变量,只在函数体内部生效

全局变量是指在函数体内、体外都能生效的变量。

如在函数体内部想要修改全局变量,那需要在函数体内部先用global关键字声明变量。 

#演示局部变量
def test_a():
    num = 100
    print(num)

test_a()
# print(num)   #此处会报错

#演示全局变量
num = 200
def t1():
    print(f"t1:{num}")
def t2():
    global num
    num = 300
    print(f"t2:{num}")
t1()
t2()
print(num)

#综合案例

以下是自己最初的版本:

"""
综合案例:黑马ATM
1、定义一个全局变量money,记录银行卡余额,默认初始值5000
2、定义一个全局变量name,记录客户姓名(启动程序时输入)
3、定义如下函数:查询余额、存款、取款、主菜单
要求:
*程序启动后输入客户姓名
*查询余额、存款、取款后都会返回主菜单
*存款、取款后都要显示一下当前余额
*客户选择退出或者输入错误程序会退出,否则一直运行
"""

name = input("您好,请输入你的姓名:")
money = 5000

def main_menu():
    """
    main_menu函数功能为显示主菜单
    :return: 返回值为客户的选项号码
    """
    print("-----------------------主菜单-----------------------")
    print(f"{name}您好,欢迎来到黑马银行ATM,请选择操作:")
    print("查询余额  【输入1】")
    print("存款        【输入2】")
    print("取款        【输入3】")
    print("退出        【输入4】")
    print("请输入您的选项(1~4):")
    return int(input())

def show_money():
    """
    show_money函数功能为显示当前余额,主要用于其他函数调用
    :return: 无返回值
    """
    print(f"{name}您好,您当前账户的余额是{money}元。")

def check():
    """
    check函数功能为查询余额
    :return: 无返回值
    """
    global  choice
    print("-----------------------查询余额-----------------------")
    show_money()
    choice = main_menu()

def withdraw():
    """
    withdraw函数功能为取款,取款后余额须更新 ,且返回主菜单
    :return: 无返回值
    """
    global money
    global choice
    n = int(input("请输入你要取款的数额(整数)"))
    while n > money:
        n = int(input("请重新输入你要取款的数额(整数)"))
    money -= n
    show_money()
    choice = main_menu()

def deposit():
    """
    deposit函数功能为存款,存款后余额须更新显示,且返回主菜单
    :return:
    """
    global money
    global choice
    n = int(input("请输入你要存款的数额(整数)"))
    money += n
    show_money()
    choice = main_menu()

choice = main_menu()
while choice != 4:
    if choice == 1:
        check()
    elif choice == 2:
        deposit()
    elif choice == 3:
        withdraw()
    else:
        choice = int(input("您的选项输入有误,请重新输入(1~4):"))

print("感谢您的使用,欢迎下次光临!")

以下是黑马老师的版本,相比之下,设计思想、逻辑更合理顺畅。

"""
综合案例:黑马ATM
1、定义一个全局变量money,记录银行卡余额,默认初始值5000
2、定义一个全局变量name,记录客户姓名(启动程序时输入)
3、定义如下函数:查询余额、存款、取款、主菜单
要求:
*程序启动后输入客户姓名
*查询余额、存款、取款后都会返回主菜单
*存款、取款后都要显示一下当前余额
*客户选择退出或者输入错误程序会退出,否则一直运行
"""

#这个版本是黑马老师的版本,逻辑上更清晰

#先定义全局变量
name = None          #先不直接输入赋值,先定义
money = 5000

#再通过行为赋值
name = input("您好,请输入你的姓名:")

def main():    #直接函数名起为main()更清爽
    """
    main函数功能为显示主菜单
    :return: 返回值为客户的选项号码
    """
    print("-----------------------主菜单-----------------------")
    print(f"{name}您好,欢迎来到黑马银行ATM,请选择操作:")
    print("查询余额  【输入1】")
    print("存款        【输入2】")
    print("取款        【输入3】")
    print("退出        【输入4】")
    print("请输入您的选项(1~4):")
    return input()

def check(show_header):
    """
    check函数功能为查询余额
    :s 形参s为真时打印头行字符,否则不打印
    :return: 无返回值
    """
    if show_header:
        print("-----------------------查询余额-----------------------")
    print(f"{name}您好,您当前账户的余额是{money}元。")


def withdraw():
    """
    withdraw函数功能为取款,取款后余额须更新 ,且返回主菜单
    :return: 无返回值
    """
    global money
    n = int(input("请输入你要取款的数额(整数)"))
    while n > money:
        n = int(input("取款数额过大,请重新输入你要取款的数额(整数)"))
    money -= n
    print(f"您已成功取款{n}元。")
    check(False)   #通过check函数设置

def deposit():
    """
    deposit函数功能为存款,存款后余额须更新显示,且返回主菜单
    :return:
    """
    global money
    n = int(input("请输入你要存款的数额(整数)"))
    money += n
    print(f"您已成功存款{n}元。")
    check(False)  # 通过check函数不传参的功能

#认真看看主程序的逻辑,对比自己的写法,值得学习
while True:
    x_choice = main()
    if x_choice == "1":
        check(True)
        continue
    elif x_choice == "2":
        deposit()
        continue
    elif x_choice == "3":
        withdraw()
        continue
    else:
        print("欢迎您下次光临!")
        break

 

posted @ 2025-02-27 07:13  tsembrace  阅读(20)  评论(0)    收藏  举报