chapter5 函数
函数
是什么:组织好的、可重复使用的、用来实现特定功能的代码块
好处:
将功能封装在函数内,可供随时随地重复利用
提高代码的复用性,减少重复代码,提高开发效率
函数的定义
定义语法:
'''
def 函数名(传入参数):
函数体
return 返回值
'''
使用步骤:先定义,后调用
注意:
参数不需要,可以省略
返回值不需要,可以省略
示例:
'''
定义一个函数,函数名任意,要求调用函数后可以输出以下文字:
“请出示您的健康码以及72小时核酸证明!”
'''
def hesuan():
print("请出示您的健康码以及72小时核酸证明!")
hesuan()
函数的传入参数
作用:在函数运行的时候,接受外部传入的数据
使用示例:
def add(x,y):
result = x+y
print(f"{x}+{y}的结果是:{result}")
add(5,6)
注意事项:
函数定义中的参数(x,y),称之为形式参数
函数调用中的参数(5,6),称之为实际参数
函数的参数数量不限,使用逗号隔开
传入参数的时候,要和形参一一对应,逗号隔开
带有传入参数操作的核酸示例:
'''
定义一个函数,并接收一个参数传入(数字类型,表示提问)
在函数内进行提问判断(正常范围,小于等于37.5),并输出以下内容:
请出示您的健康码内容,并配合测量体温!
您的体温为:37.0度,体温正常,请进!
or
您的提问为:37.7度,需要隔离!
'''
def hesuan():
temp = float(input("请出示您的健康码内容,并配合测量体温!"))
if temp<= 37.5:
print(f"您的体温为:{temp}度,体温正常,请进!")
else:
print(f"您的体温为:{temp}度,需要隔离!")
hesuan()
函数的返回值
是什么:函数在执行完成后,返回给调用者的结果
用法:使用关键字:return来返回结果
注意:函数体在遇到return后就结束了,所以写在return后的代码不会执行
返回值的None类型
是什么:None是类型'NoneType'的字面量,用于表示:空的,无意义的
函数如何返回None:
不使用result语句即可返回None
主动return None
使用场景:
函数返回值
if判断
变量定义
函数说明文档
作用:对函数进行解释说明,帮助更好的理解函数的功能
定义语法:
def func(x,y):
"""
函数说明
:param x: 参数x的说明
:param y: 参数y的说明
:return: 返回值的说明
"""
函数体
return返回值
函数嵌套使用
是什么:在一个函数中,调用另一个函数
执行流程:函数A中执行到调用函数B的语句,会将函数B全部执行完成后,继续执行函数A的剩余内容
变量的作用域
局部变量:作用范围在函数内部,在函数外部无法使用
全局变量:在函数内部和外部均可使用
如何将函数内定义的变量声明为全局变量:在函数内使用global关键字:global变量
综合案例
'''
定义一个全局变量money,用来记录银行卡余额(默认500w)
定义一个全局变量name,用来记录客户姓名(启动程序时输入)
定义如下的函数:
查询余额
存款
取款
主菜单
要求:程序启动后要求输入客户姓名
查询余额、存款、取款后都会返回主菜单
存款、取款后,都应显式一下当前余额
客户选择退出、输入错误时,程序退出,否则一直运行
'''
money = 5000000
name = input("请输入您的姓名")
def main_menu():
print(f"{name},您好,请选择操作:")
print("查询余额\t[输入1]")
print("存款\t\t[输入2]")
print("取款\t\t[输入3]")
print("退出\t\t[输入4]")
returninput("请输入您的选择:")
def enquire_account_balance(show_header):
ifshow_header:
print("查询结果如下:")
print(f"当前账户余额为:{money}元")
def deposit(num):
global money
money += num
print("存款结果如下:")
print(f"您好,你已存入{num}元!")
enquire_account_balance(False)
def withdraw(num):
global money
money -= num
print("取款结果如下:")
print(f"您好,你已取出{num}元!")
enquire_account_balance(False)
def exit_func():
print("操作已结束!")
while True:
keyboard_input = main_menu()
if keyboard_input == "1":
enquire_account_balance(True)
continue#通过continue进行循环
elif keyboard_input == "2":
num = int(input("How much?"))
deposit(num)
continue
elif keyboard_input == "3":
num = int(input("How much?"))
withdraw(num)
continue
else:
print("程序退出!")
break
chapter6 数据容器
数据容器入门
是什么:一种可以存储多个元素的python数据类型
python有哪些数据容器:列表list、元组tuple、字符串str、集合set、字典dict
list列表
定义语法:
xxx = [元素1,元素2,元素3]
是什么:数据容器内的每一份数据,都称之为元素
元素类型:元素类型没有任何限制,列表也可以是元素,这样便定义了嵌套列表
特点:
可以容纳多个元素,上限为2**63-1
可以容纳不同类型的元素(混装)
数据是有序存储的(有下标符号)
允许重复数据存在
可以修改(增删等)
list的下标索引
是什么:
列表中的每一个元素都有编号,编号即下标索引。
从前向后时,从0开始递增
从后向前时,从-1开始递减
通过下标索引取出对应位置元素:
列表[下标]
注意:超出下标索引的取值范围则无法取出元素,并且会报错
列表的常用操作
查询下标值index:列表.index(元素)
修改特定位置的元素值:列表[下标]=值
插入insert:列表.insert(下标,元素):在指定下标处,插入指定的元素
追加元素append、extend
列表.append(元素):在列表中追加一个元素
列表.extend(容器):将数据容器的内容依次取出,追加到列表尾部
删除元素del、pop、remove
del 列表[下标]:删除列表指定下标元素
列表.pop(下标):删除列表指定下标元素,并把元素变成返回值
列表.remove(元素):从前到后,删除此元素第一个匹配项
清空列表clear:列表.clear()
统计:
某一元素在列表中出现的次数count:列表.count(元素)
列表中的元素数量len:len(列表)
列表的循环遍历
遍历:将容器内的元素依次取出并处理,称之为遍历操作
如何遍历:可以是用while或者for循环
for循环的语法:
for临时变量in数据容器:
对临时变量进行处理
for循环和while循环对比:
for循环更简单,while循环更灵活
for用于从容器内依次取出元素并处理,while用于任何需要循环的场景
示例:取出列表内的偶数
my_list = [1,2,3,4,5,6,7,8,9,10]
#for
even_list = []
for x in my_list:
if x % 2 == 0:
even_list.append(x)
print(f"{even_list}")
#while
even_list1 = []
index = 0
while index < len(my_list):
element = my_list[index]
if element % 2 == 0:
even_list1.append(element)
index += 1
print(f"{even_list1}")
元组的定义和操作
定义方式:
(元素,元素,元素)
t1 = tuple()
t2 = ()
t3 = (1,2,3)
操作方法:
元组.index(元素)
元组.count(元素)
len(元组)
注意:不可修改元组内容
特点
可以容纳多个数据
可以容纳不同类型的数据
数据是有序存储的(下标索引)
允许重复数据存在
不可以修改(增删等)(如果嵌套list,可以修改内部的list)
支持for/while循环
字符串的定义和操作
字符串为什么是数据容器:字符串可以看作是字符的容器,支持下标索引等特性
常用操作方法:
特点:
只可以存储字符串
长度任意(取决于内存大小)
支持下标索引
允许重复字符存在
不可以修改(增删等)
支持for/while循环
示例:分割字符串
'''
给定一个字符串:"xiaoming xiaowang xiaofang"
统计字符串中有多少个an字符
将字符串中的空格,全部替换为字符|
并按照|将字符串分割,得到列表
'''
str1 = "xiaoming xiaowang xiaofang"
count = str1.count("an")
print(f"字符串{str1}中有:{count}个an字符")
new_str1 = str1.replace(" ","|")
print(f"字符串{str1},被替换空格后,结果为:{new_str1}")
split_new_str1 = new_str1.split("|")
print(f"字符串{new_str1}中,按照|分割后,得到:{split_new_str1}")
数据容器(序列)的切片
是什么:内容连续、有序,支持下标索引的一类数据容器
哪些数据容器可以视为序列:列表、元组、字符串
序列如何做切片:
序列[起始:结束:步长]
起始可以省略,省略则从头开始
结束可以省略,省略则到末尾结束
结束不包含那个元素本身
步长可以省略,省略则默认为1
步长可以为负数,此时倒序执行(起始和结束也需倒过来)
示例:
'''
有字符串“ABCD,HGFE,IJKL”,尝试得到“EFGH”
'''
#1 直接倒序取出
str1 = "ABCD,HGFE,IJKL"
new_str1 = str1[8:4:-1]
print(new_str1)
#2 先取出再倒序
str1 = "ABCD,HGFE,IJKL"
new_str2 = str1[5:9]
new_str2n = new_str2[::-1]
print(new_str2n)
#3 split分割成列表,取出对应元素再倒序
str1 = "ABCD,HGFE,IJKL"
str1_list = str1.split(",")
new_str1_list = str1_list[1]
new_str3 = new_str1_list[::-1]
print(new_str3)
集合的定义与操作
特点:
集合内不允许重复元素(去重)
集合内元素是无序的(不支持下标索引)
定义方式:
{元素,元素,元素}
常用操作:
如何遍历集合元素:
可以用for循环进行遍历
不可以用while循环遍历,因为集合不支持下标索引
集合的特点:
可以容纳多个数据
可以容纳不同类型的数据(混装)
数据是无序存储的(不支持下标索引)
不允许重复数据存在
可以修改(增删等)
支持for循环