#函数
函数是组织好的,可重复使用(调用)的,用来实现特定功能的代码段。
""" 不使用内置函数len(),统计字符串长度的计算 """ def myfunc_len(s):count = 0for c in s:count += 1print(f"字符串{s}的长度是{count}。")return countstr1 = "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 + yprint(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 = 100print(num)test_a() # print(num) #此处会报错#演示全局变量 num = 200 def t1():print(f"t1:{num}") def t2():global numnum = 300print(f"t2:{num}") t1() t2() print(num)
#综合案例
以下是自己最初的版本:
""" 综合案例:黑马ATM 1、定义一个全局变量money,记录银行卡余额,默认初始值5000 2、定义一个全局变量name,记录客户姓名(启动程序时输入) 3、定义如下函数:查询余额、存款、取款、主菜单 要求: *程序启动后输入客户姓名 *查询余额、存款、取款后都会返回主菜单 *存款、取款后都要显示一下当前余额 *客户选择退出或者输入错误程序会退出,否则一直运行 """name = input("您好,请输入你的姓名:") money = 5000def 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 choiceprint("-----------------------查询余额-----------------------")show_money()choice = main_menu()def withdraw():"""withdraw函数功能为取款,取款后余额须更新 ,且返回主菜单:return: 无返回值"""global moneyglobal choicen = int(input("请输入你要取款的数额(整数)"))while n > money:n = int(input("请重新输入你要取款的数额(整数)"))money -= nshow_money()choice = main_menu()def deposit():"""deposit函数功能为存款,存款后余额须更新显示,且返回主菜单:return:"""global moneyglobal choicen = int(input("请输入你要存款的数额(整数)"))money += nshow_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 moneyn = int(input("请输入你要取款的数额(整数)"))while n > money:n = int(input("取款数额过大,请重新输入你要取款的数额(整数)"))money -= nprint(f"您已成功取款{n}元。")check(False) #通过check函数设置def deposit():"""deposit函数功能为存款,存款后余额须更新显示,且返回主菜单:return:"""global moneyn = int(input("请输入你要存款的数额(整数)"))money += nprint(f"您已成功存款{n}元。")check(False) # 通过check函数不传参的功能#认真看看主程序的逻辑,对比自己的写法,值得学习 while True:x_choice = main()if x_choice == "1":check(True)continueelif x_choice == "2":deposit()continueelif x_choice == "3":withdraw()continueelse:print("欢迎您下次光临!")break