复习
容器
1. 种类及特点
字符串:存储字符编码,不可变,序列
列表:存储变量,可变,序列
元组:存储变量,不可变,序列
字典:存储键值对,可变,散列
集合:存储键,可变,散列
2. 相互转换
? --> 列表 list()
? --> 元组 tuple()
? --> 字典 dict()
? --> 集合 set()
? --> 字符串 “连接符”.join(?)
3. 内存图
"""
列表 推导式
[处理变量 for 变量 in 可迭代对象 if 条件]
字典 推导式
{处理变量 : 处理变量 for 变量 in 可迭代对象 if 条件}
集合 推导式
{处理变量 for 变量 in 可迭代对象 if 条件}
适用性:
根据可迭代对象,构建容器时.
"""
# 需求1:range(10) --> key:0-9 value: key的平方
dict01 = {item: item ** 2 for item in range(10)}
print(dict01)
# 需求2:range(10) --> key:0-9 value: key的平方
# 只考虑奇数
dict01 = {item: item ** 2 for item in range(10) if item % 2}
print(dict01)
# 练习1:["齐天大圣","八戒","唐三藏"]-->key:字符 vlaue:字符长度
# {"齐天大圣":4,"八戒":2,"唐三藏":3}
list_names = ["齐天大圣", "八戒", "唐三藏"]
dict_names = {item: len(item) for item in list_names}
print(dict_names)
# 练习2:["张无忌","赵敏","周芷若"] [101,102,103]
# {"张无忌":101,"赵敏":102,"周芷若":103}
list_names = ["张无忌", "赵敏", "周芷若"]
list_rooms = [101, 102, 103]
dict_infos = {list_names[i]: list_rooms[i] for i in range(len(list_names))}
print(dict_infos)
# 练习3:将练习2的字典,key 与 value 颠倒
# {101:"张无忌",102:"赵敏",103:"周芷若"}
dict_infos2 = {v: k for k, v in dict_infos.items()}
print(dict_infos2)
"""
for for
练习:exercise02
"""
# 外层循环控制行
for r in range(3): # 0 1 2
# 外层循环控制列
for c in range(4): # 0123 0123 0123
print("老王", end=" ")
print() # 换行
"""
4行5列
*****
#####
*****
#####
"""
for r in range(4):
for c in range(5):
if r % 2 !=0:
print("*",end = "")
else:
print("#",end = "")
print()
for r in range(4):
for c in range(5):
if c % 2 !=0:
print("*",end = "")
else:
print("#",end = "")
print()
"""
推导式嵌套
练习:exercise08
"""
list_fruits = ["香蕉", "苹果", "哈密瓜"]
list_drinks = ["可乐", "雪碧", "牛奶", "咖啡"]
# list_result = []
# for fruit in list_fruits:
# for drink in list_drinks:
# list_result.append(fruit + drink)
list_result = [fruit + drink for fruit in list_fruits for drink in list_drinks]
print(list_result)
"""
for for 练习
"""
# 二维列表
list01 = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
]
# -- 打印第三行第二列数据 [行索引][列索引]
print(list01[2][1])
# -- 从右向左,打印第二行数据(一行一个)
for i in range(len(list01[1])-1,-1,-1):
print(list01[1][i])
# -- 从上向下,打印第三列数据(一行一个)
# [0][2] [1][2] [2][2]
for i in range(len(list01)):
print(list01[i][2])
# -- 将二维列表以表格状打印出来
# 1 2 3 4
# for r in range(len(list01)):
# for c in range(len(list01[r])):
# print(list01[r][c],end = " ")
# print()
for line in list01:
for item in line:
print(item,end = " ")
print()
"""
矩阵转置
算法:将list01中每列,存储到list02中每行
"""
list01 = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
]
list02 = []
# list01[0][0]
# list01[1][0]
# list01[2][0]
for c in range(len(list01[0])):
line = []
for r in range(len(list01)):
line.append(list01[r][c])
list02.append(line)
print(list02)
"""
函数
"""
# 代码的重复,是万恶之源
# 创建函数
def attack():
"""
攻击
"""
print("直拳")
print("勾拳")
print("侧踹")
# 参数:调用者 给 创建者 传递的信息
# 创建者 要求 调用者 提供的信息
def attack_repeat(count): # 形式参数
"""
重复攻击
:param count: int类型的 攻击次数
"""
for __ in range(count):
attack()
# 调用函数
attack()
attack_repeat(3) # 实际参数
attack_repeat(10)
"""
函数返回值
语法
函数创建者 给 调用者 传递的结果
"""
def func01():
print("func01执行喽~")
return 100 # return 数据
re = func01()
print(re)
def func02():
print("func02执行喽~")
# return # return后没有数据或者没有return ,默认为None
re = func02()
print(re)
def func03():
print("func03执行喽~")
return # 退出函数
print("func03又执行喽~")
func03()
"""
函数返回值
应用
设计思想:小而精
"""
# 需求:定义函数,两个数值相加.
def add(number01,number02):
"""
两个数值相加
:param number01: 数值1
:param number02: 数值2
:return:数值类型,相加的结果
"""
result = number01 + number02
return result
# 测试
n1 = float(input("请输入第一个数字:"))
n2 = float(input("请输入第二个数字:"))
re = add(n1,n2)
print("结果是:"+str(re))
"""
思想:
将第一位元素,与后面元素进行比较,发现更小的则交换
二
三
...
"""
list01 = [4, 54, 5, 6, 7, 8, 3]
# list01[0] list01[1]
# list01[0] list01[2]
# list01[0] list01[3]
# list01[0] list01[4]
# for i in range(1,len(list01)):
# # list01[0] 与 list01[i] 进行比较
# pass
# list01[1] list01[2]
# list01[1] list01[3]
# list01[1] list01[4]
# list01[1] list01[5]
# for i in range(2, len(list01)):
# # list01[1] 与 list01[i] 进行比较
# pass
for r in range(len(list01) - 1): # 0 1
for c in range(r + 1, len(list01)): # 123.. 234..
if list01[r] > list01[c]:
list01[r], list01[c] = list01[c], list01[r]
print(list01)
"""
list01 = [34,8,56,9,8,9]
判断列表中是否具有相同元素True False
思想:
将第一位元素,与后面元素进行比较,发现相同则打印结论
二
三
如果所有元素比较后,也没有发现相同,则打印结论。
"""
list01 = [34, 8, 56, 9, 8, 9]
result = False # 假设结论是没有重复
# 取数据
for r in range(len(list01) - 1):
# 作比较
for c in range(r + 1, len(list01)):
if list01[r] == list01[c]:
result = True
break # 退出一层循环
if result:
break
print(result)
"""
list01 = [34, 8, 56, 9, 8, 9]
删除列表中相同元素(重复元素只保留一个)
要求:不使用集合
算法:
从后向前判断,如果相同元素(从前向后判断),则删除后面的元素.
"""
list01 = [34, 8, 56, 9, 8, 9]
# 取数据
for r in range(len(list01)-1,-1,-1):
# 作比较
for c in range(r):
if list01[r] == list01[c]:
del list01[r]
break # 如果删除了后面元素,则无需继续用当前元素比较了
print(list01)
# 色子 1 -- 6
# 色子 1 -- 6
# 色子 1 -- 6
# 将3个色子所有组合数存储到列表中
# list_result = []
# for x in range(1,7):# 1 2
# for y in range(1,7):# 1 2 ..
# for z in range(1,7):#123456 123456
# list_result.append((x,y,z))
list_result = [(x, y, z) for x in range(1, 7) for y in range(1, 7) for z in range(1, 7)]
print(list_result)
# 练习1: 定义函数,在终端中打印列表一个元素一行)
# list01 = [43,4,5,78]
# list02 = [76,6,579]
def print_list(list_target):
"""
打印列表,将列表每个元素打印在终端中(一行一个)
:param list_target:list类型,需要打印的列表
"""
for item in list_target:
print(item)
list01 = [43, 4, 5, 78]
list02 = [76, 6, 579]
print_list(list01)
print_list(list02)
# 练习:定义函数,在终端中根据边长打印矩形
# day05/day04_exercse/exercise01
def print_rectangle(lenght,char):
"""
打印矩形
:param lenght:int类型 边长
"""
print(char * lenght)
for __ in range(lenght - 2):
print(char + " " * (lenght - 2) + char)
print(char * lenght)
# 测试
print_rectangle(5,"*")
print_rectangle(10,"$")
"""
改造 day04/exercise01 代码
定义函数,计算整数每位相加和
"""
def each_unit_sum(number):
"""
:param number:
:return:
"""
sum_value = 0
for item in str(number):
sum_value += int(item)
return sum_value
# 测试
print(each_unit_sum(1234))
"""
改造 day03/exercise04 代码
定义函数,根据成绩判断等级.
"""
# def calculate_score_level(score):
# if score > 100 or score < 0:
# return "不在范围内0-100"
# elif 90 <= score:
# return "优秀"
# elif 80 <= score:
# return "良好"
# elif 60 <= score:
# return "及格"
# else:
# return "不及格"
# 因为return 退出函数,所以无需else语句
def calculate_score_level(score):
if score > 100 or score < 0:
return "不在范围内0-100"
if 90 <= score:
return "优秀"
if 80 <= score:
return "良好"
if 60 <= score:
return "及格"
return "不及格"
print(calculate_score_level(95))