Python基础之元组和字典
一、元组:
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 in t01: 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 += day print(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" in d01: print(d01["d"]) print(d01) # 删除 del d01["c"] print(d01) # 获取字典中所有元素: for key in d01: print(key) print(d01[key]) # 获取字典中所有记录(元组) for item in d01.items(): print(item[0]) # key print(item[1]) # value for k,v in d01.items(): print(k) # key print(v) # value # 获取所有键 for k in d01.keys(): print(k) # 获取所有值 for v in d01.values(): print(v)
6、实例:
(1)在控制台中录入一个字符串,打印这个字符串中的字符以及各字符出现的次数
str_input = input("请输入一个字符串:") # key: 字符 value:次数 result = {} # (1)逐一判断字符,出现的次数. for item in str_input: # (2)如果没有统计过该字符串 if item not in result: result[item] = 1 else: # (3)否则,次数增加 # result[item] = result[item] + 1 result[item] += 1 print(result)
(2)给定一个列表["张三丰","无忌","赵敏"] ,以字典的形式输出键为列表元素,值为列表元素长度,形如:{"张三丰":3,"无忌":2,"赵敏",2}
#方法一 list01 = ["张三丰", "无忌", "赵敏"] dict01 = {} for item in list01: dict01[item] = len(item) #方法二 dic02 = {item: len(item) for item in list01} 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 in range(len(list01))} print(dic02) # 循环方式(值不重复) # dic03 = {} # for key,value in dic02.items(): # dic03[value] = key # 字典推导式(值重复) # {101: '张三丰', 102: '赵敏'} 张无忌与赵敏同居,导致key重复,无忌被覆盖. dic03 = {value: key for key, value in dic02.items()} print(dic03) #[(102, '无忌'), (101, '张三丰'), (102, '赵敏')],即值重复时,用列表推导式 list03 = [(value,key) for key, value in dic02.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 in list_student_info: for key,value in dict_stu.items(): print("%s -- %s"%(key,value))
(5)练习5:猜拳,规则:系统随机出拳,在控制台中循环猜测.
""" 猜拳 规则:系统随机出拳,在控制台中循环猜测. 提示:(1)将胜利的策略存入容器 ( ("石头","剪刀"), ("剪刀","布"), ("布","石头") ) (2) 将用户猜的拳与系统出拳形成一个元组 """ import random # 胜利策略 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) in wins: print("赢啦") else: print("输啦")