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
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号