一、字符串处理
ageTable = '''
诸葛亮, 28
刘备, 48
刘琦, 25
赵云, 32
张飞, 43
关羽, 45
'''
字符串需要进行一行一行的处理,则首先就要进行切片操作,切片完成是一个列表 根据换行符 \n 进行切片操作
切片完成时,数据放在列表中,对于空元素,则不处理,只处理有内容的
#定义两个列表,用来保存年龄大于30岁的人的名字和小于30岁的人的名字
g30 = []
h30 = []
#切片
list1 = ageTable.split("\n")
#遍历列表一个值一个值的处理
for name_age in list1:
# 判断,如果这次循环取出的内容为空,则直接跳过不处理
new_nameage = name_age.replace(" ","")
if new_nameage == "":
continue
else:
# 不为空的时候 取出的值是一个字符串 '诸葛亮, 28', 再次根据 逗号 切片
name, age = new_nameage.split(",")
# 判断人的年龄的时候,切片后的数据类型都是字符串,要进行强制类型转换
if int(age) >= 30:
# 将年龄大于等于30岁的人名字添加到g30这个列表中
g30.append(name)
else:
h30.append(name)
print("年龄大于等于30岁的人有:", g30)
print("年龄小于30岁的人有:", h30)
var1 = [33, ('我的名字', 'Augus'), 'hello world!']
# 方式一:
var1[1] = ('我的名字', '酒剑仙')
print(var1)
str1 = '''
熊宁
杰益
王伟伟
青芳
玉琴
焦候涛
莫福
杨高旺
唐欢欢
韩旭
'''
str2 = '''
焦候涛
熊宁
玉琴
骆龙
韩旭
杨高旺
杰益
莫福
伟伟
李福
'''
# 先进行切片操作
str1_list = str1.split("\n")
# 用来保存去掉空元素个空格后的数据
new_str1_list = []
# 循环处理列表中的每一个元素
for s1 in str1_list:
new_s1 = s1.replace(" ", "")
# 如果为空元素,则跳过
if new_s1 == "":
continue
else:
# 去掉空格不为空的内容,添加到新列表中
new_str1_list.append(new_s1)
# 定义一个新列表保存值
new_str2_list = []
# 根据换行符 \n 切片
str2_list = str2.split("\n")
# 循环处理列表中的每一个元素,空元素之间跳过,非空的添加到新列表中
for s2 in str2_list:
new_s2 = s2.replace(" ", "")
# 判断是否为空
if new_s2 == "":
continue
else:
# 非空了,则添加到列表中
new_str2_list.append(new_s2)
# 通过集合的方式,求差集
a = set(new_str1_list) - set(new_str2_list)
print(f"str1中存在,str2中不存在的人为:{a}")
b = set(new_str2_list) - set(new_str1_list)
print(f"str2中存在,str1中不存在的人为:{b}")
str1 = '''
熊宁
杰益
王伟伟
青芳
玉琴
焦候涛
莫福
杨高旺
唐欢欢
韩旭
'''
str2 = '''
焦候涛
熊宁
玉琴
骆龙
韩旭
杨高旺
杰益
莫福
伟伟
李福
'''
# 先进行切片操作
str1_list = str1.split("\n")
# 用来保存去掉空元素个空格后的数据
new_str1_list = []
# 循环处理列表中的每一个元素
for s1 in str1_list:
new_s1 = s1.replace(" ", "")
# 如果为空元素,则跳过
if new_s1 == "":
continue
else:
# 去掉空格不为空的内容,添加到新列表中
new_str1_list.append(new_s1)
# 定义一个新列表保存值
new_str2_list = []
# 根据换行符 \n 切片
str2_list = str2.split("\n")
# 循环处理列表中的每一个元素,空元素之间跳过,非空的添加到新列表中
for s2 in str2_list:
new_s2 = s2.replace(" ", "")
# 判断是否为空
if new_s2 == "":
continue
else:
# 非空了,则添加到列表中
new_str2_list.append(new_s2)
print(new_str1_list)
print(new_str2_list)
# str1中有的str2中不存在的
s1_list = []
# 找出str1中存在,str2中不存在的人名
for i in new_str1_list:
# 判断每次取出的人名是str1独有\
# in 就是在的意思
if i in new_str2_list:
continue
else:
# 如果不在str2中,则将其保存到列表中
s1_list.append(i)
# str2中存在,str1中不存在
s2_list = []
for i in new_str2_list:
if i in new_str1_list:
continue
else:
s2_list.append(i)
print(f"str1中存在str2中不存在的人:{s1_list}")
print(f"str2中存在str1中不存在的人:{s2_list}")
二、嵌套for循环
boys = ['Mike', 'Jack', 'Tom']
girls = ['Lisa', 'Linda', 'Mary']
# 从外层循环取一个值,和内层循环中的每一个值组合一次,外层循环在换第二个值和内层循环组合
# 嵌套for循环,(双层for循环)
for boy in boys:
for girl in girls:
print(f"{boy}**********************{girl}")
三、函数
引入案例:
ATM
1.插卡 ()
2.输入密码 ()
3.选择取款,输入金额 ()
4.取钱
5.退卡
张三:
1.插卡 张三的卡
2.输入密码 张三的密码
3.选择取款,输入金额 金额也不一样
4.取钱
5.退卡
李四:
1.插卡 李四的卡
2.输入密码 李四的密码
3.选择取款,输入金额 金额也不一样
4.取钱
5.退卡
以上功能
取款功能:---函数的名字
1.插卡 李四的卡
2.输入密码 李四的密码
3.选择取款,输入金额 金额也不一样
4.取钱
5.退卡
取款功能:---函数的名字
以上1-5步骤就是实现函数功能的代码
卡号、密码、取款金额 可以看成是函数的参数
取出的钱 这个就是函数的返回值
1.函数的定义
语法:
函数名的命名规则和变量;类似
其次函数的形参,可以定义也不定义,根据实际需求
def 函数名(形参):
函数体(实现函数功能的代码)
# 函数的定义
# 函数要先定义在调用
# 函数体中代码是缩进显示的,缩进也是建议的四个空格
# 函数可以减少代码的冗余(重复)
# 一个函数可以多次调用
# 定义了一个函数
def add():
c = 3 * 4
print(f"c的值为:{c}")
# 函数调用
add()
add()
2.函数的调用
函数调用的时候其实 函数名()
def add(a, b):
s = a + b
print(f"a的值为:{a}")
print(f"b的值为:{b}")
print(f"s的值为:{s}")
# 关键字参数:可以指定传递给那个形参
# add(b=4, a=5)
# add(6, b=4)s
# 一旦指定了形参=值的形式,后续格式必须保持一致
# add(b=4, 8)
3.函数的参数
-
必填参数
# 必填参数在函数调用的时候必须传入值 def add(a, b): c = a * b print(f"c的值为:{c}") # 函数调用 add(5, 3)
-
默认值参数
# 默认值参数 # 默认值参数,在不给他传入值的时候就使用默认值,传入的时候就时候新传入的值 # 默认值参数必须定义在必填参数的后面 def add(a, b, c=2): s = a + b + c print(f"a的值为:{a}") print(f"b的值为:{b}") print(f"c的值为:{c}") print(f"s的值为:{s}") add(3, 6, 9)
-
可变参数
# 可变参数:为了解决传入的参数个数不确定的情况,采用可变参数,可以接受任意个数的参数 # 要按照这个顺序定义 必填参数、默认值参数、可变参数 # 可变参数在定义的时候,形参名字前面带一个星号 # 可变参数将传入的多个值,组合成了一个元组,这个现象称之为 组包 # 给 形参带星号 在函数体中即可将组包后的元组拆开,这个称之为解包 # 可变参数如果不给传入值,则是一个空元组 # 可变参数也称之为不定长参数
def add(a, b, c=2, *args): s = a + b + c print(f"a的值为:{a}") print(f"b的值为:{b}") print(f"c的值为:{c}") print(f"args的值为:{args}") # 解包 print(*args) print(f"s的值为:{s}") add(3, 6, 9, “张三”, 34, 23, “tom”)
- 关键字可变参数
```python
# 关键字可变参数
# 关键字可变参数,接受传入的是一个键值对
# 可变参数定义的时候,形参名前面加**
# 同时形参定义的顺序是:必填参数、默认值参数、可变参数、关键字可变参数
# 关键字可变参数将接受的键值对组合了一个字典
# 关键字可变参数接受的是一个键值对, name="李四" name不能加引号
# 如果传入的是一个字典, 字典名字加 **dict
def add(a, b, c=2, *args, **kwargs):
s = a + b + c
print(f"a的值为:{a}")
print(f"b的值为:{b}")
print(f"c的值为:{c}")
print(f"args的值为:{args}")
print(f"kwargs的值为{kwargs}")
print(f"s的值为:{s}")
dict1 = {'name':"张三", 'age':23}
add(3, 6, 9, "张三", 34, 23, "tom", **dict1)
4.函数的返回值
# 函数的返回值:函数返回值是函数体中代码执行完成的结果,
# 使用return来指定返回值
# python中的返回值可以是任意类型的数据
# python中可以同时拥有多个返回值,多个值直接使用逗号隔开,返回的多个值组合成了元组
def add(a, b):
s = a + b
return s,"没有表演节目的同学注意笔记",["系统测试基本笔记","MySQL笔记","Linux笔记","app测试笔记"]
# 执行输出函数的函数名,显示的是该函数在内存中的地址<function add at 0x000001967C6D61F8>
# print(add)
# 用p来接收函数的返回值 如果没有执行返回值则显示 None
p = add(4,5)
print(f"p的值为:{p}")
5.在函数中定义函数
def foo():
print("in foo")
# 定义了bar函数
def bar():
print("in bar")
bar()
foo()
6.在函数体中调用函数
def f3():
print("***********f3开始********")
print("不表演节目将是你最后悔的选择!!!因为太多了")
print("***********f3结束********")
def f2():
print("***********f2开始********")
f3()
print("***********f2结束********")
def f1():
print("***********f1开始********")
f2()
print("***********f1结束********")
f1()
7.全局变量和局部变量
# 局部变量和全局变量
# 局部变量:是定义在函数体内部的变量,作用域仅限于该函数中
# 全局变量:定义在函数体外部,既在函数体内部有效,也在函数体外部有效
#
# 全局变量
x = 10
def foo():
# 局部变量
x = 90
print(f"函数体内部的x的值为:{x}")
foo()
print(f"函数体外部的x的值为:{x}")
x = 10
def foo():
print(f"函数体内部的x的值为:{x}")
foo()
print(f"函数体外部的x的值为:{x}")
def foo():
# 虽然定义的时候局部变量,但是可以将局部变量申明为全局变量
global x
x = 90
print(f"函数体内部的x的值为:{x}")
foo()
print(f"函数体外部的x的值为:{x}")
备注:资料来着“蜗牛学院”的笔记