【第二天】一月速通Python第二天,函数,数据容器,列表,元组,字典。
第二天打卡
- 函数定义
- 函数参数
- 函数返回值
- 函数说明文档
- 函数嵌套调用
- 变量的作用域
- 函数综合案例
- 数据容器
- 列表(list)
- 列表的方法
- 列表的遍历
- 元组(tuple)
- 字符串(str)
- 数据容器(序列)的切片
- 数据容器集合(set)
- 数据容器:dict(字典,映射)
- 字典的常用操作
- 字典特点
- 数据容器通用操作
- 综合案列——字典结合函数银行界面
昨天完成了python环境的搭建,基本语法的学习,while和for循环,bool语句,今天开始学习函数,数据容器,列表,元组,字典。
# 函数len是python的内置函数
string = "I offer you the bitterness of a man who has looked long and long at the lonely moon."
length = len(string)
print(length)
函数定义
#函数
组织好的可重复使用的用来实现特动功能的代码段。
def 函数名(传入参数):
函数体
return 返回值
def cxk():print("大家好,我是练习时长两年半的练习生cxk,小鸡子露出黑脚了吧")
cxk()
- 参数如果不需要可以省略
- 返回值不需要也可以省略
- 先定义函数后使用函数
函数参数
传入参数,使用函数时调用外部参数时提供的数据。
# 定义函数
def add(a, b):result = a + bprint(f"a+b的结果是{result}")
# 调用函数
add(1, 2)
在函数定义中使用的参数a,b称为形参,逗号分隔。
函数调用时使用的参数称为实参,逗号分隔按顺序填入,与形参一一对应,函数的参数量不受限制,也可以没有。
定义函数表示体温,正常范围小于等于37.5℃。
def check(a):print("欢迎来到小鸡子乐园,请配合测量体温。")if a >37.5:print(f"您的体温是{a}体温太高了,不能进")else:print(f"您的体温是{a}体温正常,您可以正常游玩。")
check(37.2)
check(38.9)
函数返回值
返回值就是程序函数完成事情后,返回给调用者的结果。
# 返回值需要变量接收返回值
def add(a, b):result = a + b
# 通过返回值将结果返回给调用者return result
r = add(2, 3)
print(r)
到return就结束了后面的代码不再执行。
#None
无返回值的函数就是返回了None这个字面量,返回空的,也可以使用None主动接收返回值,效果一样。
None用于if 判断等同于False。
None定义变量暂时不需要变量的具体值。
函数说明文档
给函数添加说明文档,辅助理解函数作用,提高代码可读性,可以利用多行注释的形式对函数进行解释说明,内容应该写在函数体之前。
函数嵌套调用
在一个函数中调用另一个函数
函数A中执行到调用函数B的语句会把B全部执行完成后,继续执行A的内容。
变量的作用域
变量的作用域指的是变量的作用范围哪里可用哪里不可用
局部变量和全局变量
局部变量是定义在函数体内部的变量只在函数体内部生效。
全局变量是指在函数体内体外都能生效的变量
global
声明全局变量,函数体内体外都能使用。
函数综合案例
银行ATM界面
name = input("请输入您的姓名")# 声明全局变量
money = 10000# 定义查询函数
def check(show_header):if show_header:print("-----------查询余额-----------")print(f"{name}您当前余额为{money}")# 定义取款函数
def withdrawal(a):global moneyif a <= money:money -= a print(f"取款{a}成功,您当前余额为{money}")else:print(f"{name}您当前余额不足")check(False)# 定义存款函数
def deposit(a):global moneymoney += aprint(f"{name}存款{a}成功")check(False)# 定义主菜单
def main():print("欢迎使用自助ATM")print("查询余额请按【1】")print("存款请按【2】\t\t")print("取款请按【3】\t\t")print("退出请按【0】\t\t")while True:main()cin = int(input("请输入交易类型")) if cin == 1:check(True)continueelif cin == 2:num = float(input("请输入存款金额:"))deposit(num)continueelif cin == 3:num = float(input("请输入取款金额:"))withdrawal(num)continueelse:break
数据容器
# 集合 列表 字符串 元组 字典
set
list
str
tuple
dict
列表(list)
#列表
[元素1,元素2,元素3,······]
变量 = [元素1,元素2,元素3,······]
空列表
变量=[]
变量=list()
列表可以存多种数据,可以嵌套,可以存多种数据类型。
列表的每一个元素都有下标索引从左往右,从0开始。
下标索引不要超出范围,否则报错。
# 下标索引用法 列表[标号]
food_list = ["vegetable","apple", "orange", "milk"]
print(food_list[0])
print(food_list[1])
# 倒序从-1开始,从右往左。
print(food_list[-1])
print(food_list[-2])
# 列表支持嵌套同样有索引
list1 = [["vegetable", "apple", "orange"], ["bus", "taxi", "car"]]
print(list1[1][0])
print(list1[0][2])
列表的方法
在python中如果将函数定义为class(类)的成员,那么函数称之为方法。
方法 | 操作 |
---|---|
列表.index(元素) | 查询某元素在列表中的下表索引找不到报错 |
列表[下标]= 值 | 修改列表中元素的值 |
列表.insert(下标,元素) | 在列表中指定的下标位置插入指定的元素 |
列表.append(元素) | 在列表末尾追加指定的元素 |
列表.extend(其他数据容器) | 将其他数据容器的元素取出依次追加到列表中 |
del列表[下标] 列表.pop(下标) | 删除指定下标索引的元素 将指定下标索引的元素弹出,可以用变量接收。 |
列表.remove(元素) | 删除某元素在列表中的第一个匹配项 |
列表.clear() | 清空列表内容 |
列表.count(元素) | 统计某元素在列表中的数量 |
len(列表) | 统计列表内有多少元素 |
列表.reverse() | 将列表翻转 |
列表.sort(reverse = True) | 按照字母顺序相反的顺序排列 |
- 列表可以容纳多个元素 上限为
2**63
- 可以容纳不同类型的元素 混装
- 数据有序存在有下标序号
- 允许重复数据存在
- 可以修改(增添删除等)
"""
有一个列表内容[21,25,21,23,22,20]记录的学生年龄
1,定义列表并用变量接收
2,追加数字31到列表尾部
3,追加一个新列表[29,33,30],到列表的尾部
4,取出第一个元素
5,取出最后一个元素
6,查找元素31在列表中的下标索引
"""
stu_age = [21, 25, 21, 23, 22, 20]
stu_age.append(31)
stu_age.extend([29, 33, 30])
age1 = stu_age[0]
age2 = stu_age.pop(-1)
index = stu_age.index(31)
print(stu_age)
print(age1)
print(age2)
print(index)
列表的遍历
将列表中元素依次取出进行处理的行为称为遍历迭代。
# while循环通过下标索引小于列表长度控制循环
index = 0
list1 = [1,2,3,4,5]
while index < len(list1):string1 = list1[index]print(f"列表的元素{string1}")index += 1
# for 循环
for x in list1:square = x**2print(square)
- while可以自定循环条件,自行控制,
- for循环不可以自定循环条件,只可以一个个取出遍历
- while循环可以控制条件无限循环for不可用
- while可以用于任何想要循环的场景
- for适用于遍历循环的场景或者简单固定次数的循环
- for更简单 while更灵活
"""
定义一个列表内容是1-10
遍历循环取出偶数组成新列表分别用for和while
"""list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list1)
# while循环
index = 0
list2 = []
while index < len(list1):num = list1[index]if num % 2 == 0:list2.append(num)index += 1
print(list1)
print(list2)
# for循环
for x in list1:if x % 2 == 0:list2.append(x)
print(list1)
print(list2)
元组(tuple)
#元组
元组定义完成不可修改
(元素1,元素2,元素3······)
变量=(元素1,元素2,元素3······)
空元组
变量=()
变量=tuple()
操作 | 方法 |
---|---|
元组.index() | 查找某个元素下标,若没有报错 |
元组.count() | 统计元组中某个元素的数量 |
len(元组) | 元组长度 |
不能修改元组中元素否则报错,但是可以修改元组中嵌套的list内容。 |
"""
定义一个元组:("周杰伦", 11,['football','music'])
查询年龄所在下标
查询姓名
删除爱好中的football
增加爱好 coding
"""
my_tuple = ("周杰伦", 11, ['football', 'music'])
index = my_tuple.index(11)
name = my_tuple[0]
my_tuple[2].remove('football')
my_tuple[2].append('coding')
print(index)
print(name)
print(my_tuple)
字符串(str)
#字符串
字符串也是数据容器,也可通过下标访问。
从前向后,下标从0开始。
从后向前,下标从-1开始。
方法 | 操作 |
---|---|
字符串.index(元素/字符串) | 在字符串中查找元素 |
字符串.replace(字符串1,字符串2) | 在字符串中的全部字符串1替换为字符串2,不是修改字符串本身,而是得到一个新的字符串 |
字符串.spilt(分隔符字符串) | 按照指定的分隔符分隔字符串,将字符串划分为多个字符串并存入列表对象中字符串本身不变得到了一个新的列表对象 |
字符串.strip() 字符串.strip(字符串) | 字符串规整去前后空格 字符串规整前后指定的字符串 |
字符串.count(元素) | 统计字符串中某元素出现的次数 |
len(字符串) | 统计字符串的长度 |
- 只可以储存字符串
- 长度任意
- 支持下次索引
- 允许重复的字符串存在
- 不可以修改增加或者删除元素(可以转换为列表修改)
- 支持for循环
"""
给定一个字符串“itheima itcast boxuegu"
统计字符串中有多少个“it"
将字符串中的空格全部替换为|
按照|进行字符串的分隔得到列表
"""
my_str = "itheima itcast boxuegu"
num = my_str.count('it')
my_str = my_str.replace(' ', '|')
my_list = my_str.split('|')
print(my_str)
print(num)
print(my_list)
数据容器(序列)的切片
序列是内容连续有序可使用下标索引的一类数据容器
列表元组字符串均可视为序列
切片:从一个序列中取出一个子序列
语法:序列[起始下标:结束下标:步长]
表示从序列中从指定位置开始一次取出元素到指定位置结束得到一个新序列:
- 起始下标表示从何开始可以留空,留空从头开始
- 结束下标表示从何处结束可以留空留空视作取到结尾
- 步长表示依次取元素,可以为负表示反向取,起始下标和结束下标也要反向标定。
- 步长1表示,一个个取元素
- 步长2表示跳过一个元素取
- 步长N表示每次跳过N-1个元素取
- 步长为负数表示反向取,起始下标和结束下标也要反向标
"""
有字符串“万过薪月,员序程马黑来,nohtyP学”
得到黑马程序员
"""
my_str = "万过薪月,员序程马黑来,nohtyP学"
new_str = my_str[::-1]
print(new_str)
my_str1 = new_str[9:14:]
print(my_str1)
数据容器集合(set)
#集合
不支持数据重复,且无序
{元素1,元素2,元素3,......}
变量 = {元素1,元素2,元素3......}
空集合
变量名称 = set()
集合是无序的不支持下标索引访问
方法 | 操作 |
---|---|
集合.add(元素) | 集合中添加元素 |
集合.remove(元素) | 移除集合中的指定元素 |
集合.pop() | 从集合中随机取出一个元素,可以用变量接收 |
集合.clear() | 清空集合 |
集合1.differerce(集合2) | 取出两个集合的差集集合1有集合2没有,得到一个新集合原来的集合不变 |
集合1.difference_update(集合2) | 消除两个集合的差集,在集合1中删除和集合2相同的元素,集合1被修改集合2不变。 |
集合1.union(集合2) | 两个集合合并为一个集合,得到新集合,旧集合不变 |
len(集合) | 统计集合元素数量 |
集合的遍历,集合不支持下标索引不能使用while循环,可以用for。 | |
集合特点 |
- 可以容纳多个数据
- 容纳不同数据类型混装
- ***数据是无序存储的,不支持下标索引
- ***集合中不允许重复数据存在
- 集合中数据可以修改
- 可以用for循环不能用while
"""
my_list = ["黑马程序员",'传智播客','黑马程序员','传智播客','itheima','itcast','itheima','itcast','best']
定义一个空集合
for循环遍历列表
在for循环中将列表元素添加到集合
得到集合对象打印输出
"""
数据容器:dict(字典,映射)
#字典
字典使用{}元素是键值对
{key:value,key:value......}
变量 = {key:value, key:value,key:value......}
空字典
my_dict = {}
my_dict = dict()
字典中的key不能重复,value可以重复。key重复添加等于覆盖掉原始数据
字典不可以使用下标索引但是可以用key值来取得对应的value。
字典中的key和value可以是任何数据类型key不可以为字典。
字典是可以相互嵌套的。
字典的常用操作
方法 | 操作 |
---|---|
字典[key]=value | 不存在的key添加元素 |
字典[key]=value | 已知的key修改元素,会把之前的元素覆盖掉 |
字典.pop(key) | 删除元素获得指定key的value同时字典中指定key元素删除 |
字典.keys() | 获取全部的key值,可用于循环字典 |
字典.clear() | 清空字典 |
len(字典) | 统计字典中的元素 |
遍历字典 |
# 获取全部的keys来循环
for key in keys:print(key)print(dict[key])
# 直接对字典进行循环
for key in dict:"操作"
字典特点
- 可以容纳多个数据
- 可以容纳不同类型数据
- 每一份数据都是keyvalue键值对
- 通过key可以获取value,key不可重复重复会覆盖
- 不支持下标索引
- 可以修改增加或者删除元素等
- 支持for循环不支持while循环
"""
员工信息所有级别为1的级别上升一级薪水增加1000.
姓名 部门 工资 级别
王力宏 科技部 3000 1
周杰伦 市场部 5000 2
林君杰 市场部 7000 3
张学油 科技部 4000 1
刘德华 市场部 6000 2
"""
info_dict = {"王力宏": ["科技部", 3000, 1], "周杰伦": ["市场部", 5000, 2], "林君杰": ["市场部", 7000, 3], "张学油": ["科技部", 4000, 1], "刘得华": ["市场部", 6000, 2]}
for level in info_dict: if info_dict[level][2] == 1: info_dict[level][1] += 1000
print(info_dict)
数据容器通用操作
len(容器)
数据容器中元素个数
max(容器)
数据容器中最大元素
min(容器)
数据容器中最小元素
按照ASCII码比较大小
字符串大小比较是从头到尾按位比较只要有一位大那么整体就大
list(容器)str(容器)tuple(容器)set(容器)
转换为列表字符串元组集合
sorted(容器,[reverse = True])
给指定容器排序,True正序,False倒序得到一个排好序的列表
容器.sort(reverse=True(False))
永久排序
综合案列——字典结合函数银行界面
#字典定义用户信息
info_dict = {"小明":['12345678',20000],
"小红":['A123456',32000],
"张三":['Adcdt123',23440],
"李四":['aqwer1234',12300]}#定义查询函数
def check(show_header,name=None,money=None):if show_header:print("------------Menu------------")print(f"{name}您当前的余额为:{money}元")
#定义主菜单
def menu():print("欢迎使用银行ATM")print("查询余额请按1")print("\t存款请按2\t")print("\t取款请按3\t")print("\t退出请按0\t")
#定义存款函数
def deposit(name,money):info_dict[name][1] += moneyprint("存款成功!")check(False,name,info_dict[name][1])#定义取款函数
def withdraw(name,money):if info_dict[name][1] >= money:info_dict[name][1] -= moneyprint("取款成功!")check(False,name,info_dict[name][1])else:print("余额不足,请充值!")
#主循环
name = input("请输入您的姓名:")
#判断用户是否存在
if name in info_dict:#判断密码是否正确input_pwd = input("请输入您的密码:")if input_pwd == info_dict[name][0]:check(True,name,info_dict[name][1])#程序主循环while True:menu()choice = input("请输入您的选择:")if choice == "1":check(True,name,info_dict[name][1])elif choice == "2":money = int(input("请输入您要存入的金额:"))deposit(name,money)elif choice == "3":money = int(input("请输入您要取出的金额:"))withdraw(name,money)else:print("感谢使用")breakelse:print("密码错误,请重新输入!")
else:print("您输入的姓名不存在,请重新输入!")