先来感受一下
# 计算圆的面积,Π取3.14
def circle_area(r):
S = 3.14 * r ** 2
print(f"半径为{r}时,圆的面积是:{S}")
circle_area(3)
circle_area(2)
circle_area(1)
# 输出结果
'''
半径为3时,圆的面积是:28.26
半径为2时,圆的面积是:12.56
半径为1时,圆的面积是:3.14
'''
# 计算字符串的长度
def string_len(data):
i = 0
for x in data:
i += 1
print(f"该字符串是:{data},长度为:{i}")
string_len("1253637")
string_len("1212qfafa 3637")
# 输出结果
'''
该字符串是:1253637,长度为:7
该字符串是:1212qfafa 3637,长度为:14
'''
从上面例子可以看出,使用函数,可以得到一个针对特定需求、可供重复利用的代码段以提高程序的复用性,提高开发效率。
'''
def 函数名(传入参数):
函数体
return 返回值
'''
# 计算字符串的长度
def hello():
print("欢迎您来到公园\n祝您旅途愉快")
hello()
# 输出结果
'''
欢迎您来到公园
祝您旅途愉快
'''
我们可以发现,某些场景下,函数的参数可以不需要,返回值也可以不需要。
以两数之和函数的例子来说明。
# 两数之和函数
def add_2(x, y):
result = x + y
print(f"{x}+{y}的值是:{result}")
add_2(-1, 23)
# 输出结果
'''
-1+23的值是:22
'''
在上面这个函数的定义中,提供的x和y,称之为形式参数(形参)
,表示函数声明将要使用2个参数,参数之间使用逗号进行分隔。函数调用中,提供的-1和23,称之为实际参数(实参)
,表示函数执行时真正使用的参数值。传入的时候,按照顺序传入数据,使用逗号分隔。
传入参数的数量是不受限制的。可以不使用参数,也可以使用任意N个参数。传入参数的时候,要和形式参数一一对应,逗号隔开。
# 公园门票系统根据年龄(是否成年)提示收费(20元)与不收费
def ticket_money(age):
print("欢迎来到公园!")
if age >= 18:
print(f"您的年龄为{age},已成年,需要收费20元")
else:
print(f"您的年龄为{age},未成年,无需购买门票")
ticket_money(20)
ticket_money(18)
ticket_money(14)
# 输出结果
'''
欢迎来到公园!
您的年龄为20,已成年,需要收费20元
欢迎来到公园!
您的年龄为18,已成年,需要收费20元
欢迎来到公园!
您的年龄为14,未成年,无需购买门票
'''
还是以两数求和函数的例子来说明。
# 两数之和函数
def add_2(x, y):
result = x + y
return result
a = add_2(1, 2)
print(a)
# 输出结果
'''
3
'''
上述代码定义两数相加的函数功能。完成功能后,会将相加的结果返回给函数调用者。所以,变量a接收到了函数的执行结果。
所谓”返回值”,就是程序中函数被调用后,最后给调用者的结果。
注意点:函数内,写在return后面的语句将被被执行。
None类型:在 Python 中,None 是一个特殊的字面量,其类型为 NoneType 。当函数没有使用 return 语句返回数据时,实际上会返回 None 这个字面量,表示函数没有返回有实际意义的内容,即返回了空的意思。None 用于代表空值、无具体值或无实际意义的状态。
# 无return语句返回数据情形示例
def hello():
print("hello!")
result = hello()
print(result, type(result))
# 输出结果
'''
hello!
None
'''
当然,写return也是可以的,在最后写return None就可以了。None类型有以下几个应用:
1.在if判断中,None等同于False,—般用于在函数中主动返回None,配合if判断做相关处理。示例如下:
# 判断是否成年,成年可以进入KTV,否则不可以
def check_age(age):
if age >= 18:
return "Success"
else:
return None
real_age = int(input("请输入年龄:"))
result = check_age(real_age)
if not result:
print("是未成年,不可进入KTV")
else:
print("已成年,可以进入KTV")
# 输出结果
'''
请输入年龄:16
是未成年,不可进入KTV
'''
2.用于声明无内容的变量上。定义变量,但暂时不需要变量有具体值,可以用None来代替。
:param
用于解释函数参数,说明每个参数的含义;:return
用于解释函数返回值,说明返回值的类型和意义 。示例如下:'''
def func(x, y):
"""
函数说明
:param x: 参数x的说明
:param y: 参数y的说明
:return: 返回值的说明
"""
函数体
return 返回值
'''
输入一对三个双引号后,再按下回车键,以下格式会自动弹出:
def add_2(x, y):
"""
:param x:
:param y:
:return:
"""
result = x + y
return result
函数嵌套调用指的是一个函数里面又调用了另外一个函数。一个示例如下。
def fun_1(a):
"""
求一个数的平方
:param a: 这个数
:return: 这个数的平方
"""
result_1 = a ** 2
return result_1
def fun_2(x, y):
"""
求第一个数的第二个数的平方次方
:param x: 第一个数
:param y: 第二个数
:return: 第一个数的第二个数的平方次方
"""
result_2 = x ** fun_1(y)
return result_2
print(fun_2(2, 2))
print(fun_2(3, 2))
# 输出结果
'''
16
81
'''
a = 2
def func_1():
b = 1
print(b)
def func_2():
print(a)
def func_3():
print(a + 1)
func_1()
func_2()
func_3()
# 输出结果
'''
1
2
3
'''
其中a是全局变量,b是局部变量,若代码在最后加上:print(b),则会显示:name ‘b’ is not defined。
a = 2
def func_1():
b = 1
print(b)
def func_2():
print(a)
def func_3():
global a
a = 3
print(a)
def func_4():
print(a + 1)
func_1()
func_2()
func_3()
func_4()
# 输出结果
'''
1
2
3
4
'''
代码执行的过程如下:
使用 Python 语言编写一个模拟银行 ATM 机功能的程序。该程序需要实现以下功能:
money = 1000000
password_right = 123456
password = int(input("请输入您的密码:"))
# 查询余额
def check_money():
print("------------查询余额------------")
print(f"您好,您当前的余额还有:{money}元")
# 存款
def deposit():
print("-------------存款-------------")
x_deposit = int(input("请输入您需要存入的金额:"))
money_deposit_now = money + x_deposit
print(f"您当前存入{x_deposit}元,存款成功!")
print(f"您目前余额为{money_deposit_now}元")
# 取款
def withdraw_cash():
print("-------------取款-------------")
x_withdraw = int(input("请输入您需要取出的金额:"))
money_withdraw_now = money - x_withdraw
print(f"您当前取出{x_withdraw}元,取款成功!")
print(f"您目前余额为{money_withdraw_now}元")
# 退出
def to_exit():
print("-------------退出-------------")
if password == 123456:
print("欢迎您来到本银行ATM,请选择您需要的服务:")
print("查询余额 \t【输入1】")
print("存款 \t【输入2】")
print("取款 \t【输入3】")
print("退出 \t【输入4】")
print("请输入进的选择:", end="")
x = int(input(""))
if x == 1:
check_money()
elif x == 2:
deposit()
elif x == 3:
withdraw_cash()
elif x == 4:
to_exit()
else:
print("选择错误")
else:
print("很抱歉!密码错误")
# 输出结果
'''
请输入您的密码:123456
欢迎您来到本银行ATM,请选择您需要的服务:
查询余额 【输入1】
存款 【输入2】
取款 【输入3】
退出 【输入4】
请输入进的选择:2
-------------存款-------------
请输入您需要存入的金额:30000
您当前存入30000元,存款成功!
您目前余额为1030000元
'''
虽然完成了这个题目,但是这个代码对于ATM机的实际应用来说有着明显的缺陷:
接下来进行改进:
money = 1000000
password_right = 123456
password = int(input("请输入您的密码:"))
# 查询余额
def check_money():
print("------------查询当前余额------------")
print(f"您好,您当前的余额还有:{money}元")
# 存款
def deposit():
print("-------------存款-------------")
x_deposit = int(input("请输入您需要存入的金额:"))
global money
money += x_deposit
print(f"您当前存入{x_deposit}元,存款成功!")
check_money()
# 取款
def withdraw_cash():
print("-------------取款-------------")
x_withdraw = int(input("请输入您需要取出的金额:"))
global money
money -= x_withdraw
print(f"您当前取出{x_withdraw}元,取款成功!")
check_money()
# 主菜单
def menu():
print("欢迎您来到本银行ATM,请选择您需要的服务:")
print("查询余额 \t【输入1】")
print("存款 \t【输入2】")
print("取款 \t【输入3】")
print("退出 \t【输入4】")
print("请输入进的选择:", end="")
if password == 123456:
while True:
menu()
x = int(input(""))
if x == 1:
check_money()
elif x == 2:
deposit()
elif x == 3:
withdraw_cash()
else:
print("ATM退出")
break
else:
print("密码错误")
# 输出结果
'''
请输入您的密码:123456
欢迎您来到本银行ATM,请选择您需要的服务:
查询余额 【输入1】
存款 【输入2】
取款 【输入3】
退出 【输入4】
请输入进的选择:2
-------------存款-------------
请输入您需要存入的金额:12000
您当前存入12000元,存款成功!
------------查询当前余额------------
您好,您当前的余额还有:1012000元
欢迎您来到本银行ATM,请选择您需要的服务:
查询余额 【输入1】
存款 【输入2】
取款 【输入3】
退出 【输入4】
请输入进的选择:3
-------------取款-------------
请输入您需要取出的金额:200000
您当前取出200000元,取款成功!
------------查询当前余额------------
您好,您当前的余额还有:812000元
欢迎您来到本银行ATM,请选择您需要的服务:
查询余额 【输入1】
存款 【输入2】
取款 【输入3】
退出 【输入4】
请输入进的选择:4
ATM退出
'''
改进的点如下:
本笔记由本人学习【黑马程序员】课程及相关资料整理而来,代码均为自行创作。