一、元组:
1、定义:
内存图:
2、基本操作
3、元组作用:
4、元组基础知识代码
# 1. 创建空元组
t01=()
t02=tuple()
#2. 创建具有默认值的元组
t01= (1,2,3)
t01= tuple("abcd")
t01= (1,2,[4,5])
print(t01)
# 修改
# t01[2] = 100元组元素不能修改,报错
t01[2][0] = 100# 修改的是元素第三个元素(列表)的元素.
#3. 获取元素(索引 / 切片)
print(t01[:2])
# 获取元组所有元素for item int01:
print(item)
# 倒序获取元组所有元素for i in range(len(t01)-1, -1,-1):
print(t01[i])
t02= ("a","b")
l02= ["a","b"]
t03=t02
l03=l02
t02+= ("c","d") # 创建了新元组对象,改变了t02存储的地址.
l02+= ["c","d"] # 将["c","d"]追加到原列表中.
print(t02) # ('a', 'b', 'c', 'd')
print(t03) # ('a', 'b')
print(l03) # ['a', 'b', 'c', 'd']
# 如果元组只有一个元素,必须多写一个逗号,否则视为普通对象,不是元组对象.
t04= (1,)
print(t04)
5、实例:
(1)根据月份,计算天数
#month = int(input("请输入月份:"))#if month < 1 or month > 12:#print("输入有误")#elif month == 2:#print("28天")## elif month == 4 or month == 6 or month == 9 or month == 11:#elif month in (4,6,9,11):#print("30天")#else:#print("31天")
month= int(input("请输入月份:"))if month < 1 or month > 12:print("输入有误")else:#将每月的天数,存入元组.
day_of_month = (31,28,31,30,31,30,31,31,30,31,30,31)print(day_of_month[month - 1])
(2)在控制台中输入月,日,计算这是一年的第几天。例如输入3月5日,计算天数为?
#方法一#month = int(input("请输入月份:"))#day = int(input("请输入天:"))#day_of_month = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)#result = 0## 累加前几个月#for i in range(month - 1):#result += day_of_month[i]## 累加当月#result += day#print(result)
#方法二
month = int(input("请输入月份:"))
day= int(input("请输入天:"))
day_of_month= (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)#累加前几个月
result = sum(day_of_month[:month - 1])#累加当月
result +=dayprint(result)
二、字典:
1、定义
内存图:
2、基本操作:
3、字典推导式
4、字典VS列表
5、字典基础代码
#创建空字典
d01 ={}
d02=dict()
d01= {"a":"A","b":"B"}#d01 = dict("ab") # 分不清key value
d01 = dict([(1,2),(3,4)]) #{1: 2, 3: 4}
#第一次增加
d01["c"] = "C"
#第二次修改
d01["c"] = "CC"
#读取元素(如果不存在则异常)#建议:在字典中读取元素,先判断存在,在进行读取.
if "d" ind01:print(d01["d"])print(d01)#删除
del d01["c"]print(d01)#获取字典中所有元素:
for key ind01:print(key)print(d01[key])#获取字典中所有记录(元组)
for item ind01.items():print(item[0]) #key
print(item[1]) #value
for k,v ind01.items():print(k) #key
print(v) #value
#获取所有键
for k ind01.keys():print(k)#获取所有值
for v ind01.values():print(v)
6、实例:
(1)在控制台中录入一个字符串,打印这个字符串中的字符以及各字符出现的次数
str_input = input("请输入一个字符串:")#key: 字符 value:次数
result ={}#(1)逐一判断字符,出现的次数.
for item instr_input:#(2)如果没有统计过该字符串
if item not inresult:
result[item]= 1
else:#(3)否则,次数增加
#result[item] = result[item] + 1
result[item] += 1
print(result)
(2)给定一个列表["张三丰","无忌","赵敏"] ,以字典的形式输出键为列表元素,值为列表元素长度,形如:{"张三丰":3,"无忌":2,"赵敏",2}
#方法一
list01 = ["张三丰", "无忌", "赵敏"]
dict01={}for item inlist01:
dict01[item]=len(item)#方法二
dic02 = {item: len(item) for item inlist01}print(dic02)
(3)# 练习:
["张三丰", "无忌", "赵敏"]
[101, 102, 103]
(1) 根据两个列表形成一个字典:key姓名,value房间号
(2) 将字典的键与值进行翻转.即:key房间号,value姓名
list01 = ["张三丰", "无忌", "赵敏"]
list02= [101, 102, 102]#循环方式#dict01 = {}#for i in range(len(list01)):#dict01[list01[i]] = list02[i]
#字典推导式
dic02 = {list01[i]: list02[i] for i inrange(len(list01))}print(dic02)#循环方式(值不重复)#dic03 = {}#for key,value in dic02.items():#dic03[value] = key
#字典推导式(值重复)#{101: '张三丰', 102: '赵敏'} 张无忌与赵敏同居,导致key重复,无忌被覆盖.
dic03 = {value: key for key, value indic02.items()}print(dic03)#[(102, '无忌'), (101, '张三丰'), (102, '赵敏')],即值重复时,用列表推导式
list03 = [(value,key) for key, value indic02.items()]print(list03)
(4)练习4:在控制台中录入5个学生信息(姓名/年龄/性别)
#4. 在控制台中录入5个学生信息(姓名/年龄/性别)#数据结构:列表中嵌套字典#[#{#"name":xx,#"age":xx,#"sex":xx,#},#{#"name":xx,#"age":xx,#"sex":xx,#}#.......#]
list_student_info=[]for i in range(2):#每次循环创建一个新字典表示一个新学生
dict_student ={}
dict_student["name"] = input("请输入姓名:")
dict_student["age"] = int(input("请输入年龄:"))
dict_student["sex"] = input("请输入性别:")#向学生列表追加学生信息
list_student_info.append(dict_student)#获取所有学生信息
for dict_stu inlist_student_info:for key,value indict_stu.items():print("%s -- %s"%(key,value))
(5)练习5:猜拳,规则:系统随机出拳,在控制台中循环猜测.
"""猜拳
规则:系统随机出拳,在控制台中循环猜测.
提示:(1)将胜利的策略存入容器
(
("石头","剪刀"),
("剪刀","布"),
("布","石头")
)
(2) 将用户猜的拳与系统出拳形成一个元组"""
importrandom#胜利策略
wins =(
("石头", "剪刀"),
("剪刀", "布"),
("布", "石头")
)#将用户猜的拳与系统出拳形成一个元组
user_input_index = int(input("请输入整数(0表示石头,1表示剪刀,2表示布):"))
items= ("石头","剪刀","布")
user_input_item=items[user_input_index]
sys_input_index= random.randint(0,2)
sys_input_item=items[sys_input_index]#逻辑处理
if user_input_item ==sys_input_item:print("平局")elif (user_input_item,sys_input_item) inwins:print("赢啦")else:print("输啦")