湖南大学Python实训课程 实验十:其他组合数据类型
预习2- 元组与字典基础
第1关:元组的使用:这份菜单能修改吗?
# coding=utf-8
# 创建并初始化menu_list列表
menu_list = []
while True:
try:
food = input()
if len(food) == 0 :
raise
menu_list.append(food)
except:
break
# 请在此添加代码,对menu_list进行元组转换以及元组计算等操作,并打印输出元组及元组最大的元素
###### Begin ######
menu = tuple(menu_list)
m = 'a'
for i in menu:
if i.lower() >= m:
m = i
print(menu)
print(m)
####### End #######
第2关:字典的使用:这份菜单可以修改
# coding=utf-8
# 创建并初始化menu_dict字典
menu = {}
while True:
try:
food=input()
if len(food)==0:
raise
price=int(input())
menu[food]=price
except:
break
# 请在此添加代码,实现对menu_dict的添加、查找、修改等操作,并打印输出相应的值
########## Begin ##########
#print(menu)
menu["lamb"] = 50
if "fish" in menu:
print(menu["fish"])
menu["fish"] = 100
if "noodles" in menu:
del menu["noodles"]
print(menu)
########## End ##########
第3关:字典的遍历:菜名和价格的展示
# coding=utf-8
# 创建并初始化menu_dict字典
menu = {}
while True:
try:
food = input()
if len(food) == 0 :
raise
price = int(input())
menu[food]= price
except:
break
# 请在此添加代码,实现对menu_dict的遍历操作并打印输出键与值
########## Begin ##########
for i in menu:
print(i)
for n in menu:
print(menu[n])
########## End ##########
第4关:嵌套 – 菜单的信息量好大
# coding=utf-8
# 初始化menu1字典,输入两道菜的价格
menu1 = {}
menu1['fish']=int(input())
menu1['pork']=int(input())
# menu_total列表现在只包含menu1字典
menu_total = [menu1]
menu2 = {}
# 请在此添加代码,实现编程要求
########## Begin ##########
for i in menu1:
menu2[i] = 2 * menu1[i]
menu_total.append(menu2)
########## End ##########
# 输出menu_total列表
print(menu_total)
实验4-3 组合数据类型练习
第1关:1.数字列表练习
#数字列表练习
ls = input()
ls = ls.split()
ls = [int(x) for x in ls]
#第一题
######## 第一题补充代码开始 #########
total = sum(ls)
######## 第一题补充代码结束 #########
print('列表元素和={}'.format(total))
print('----以上是第1题输出----')
#第二题
######## 第二题补充代码开始 #########
ls2 = []
for i in range(len(ls)):
if i%2 == 1:
ls2.append(ls[i]*2)
else:
ls2.append(ls[i])
######## 第二题补充代码结束 #########
print(ls2)
print('----以上是第2题输出----')
#第三题
lt = input()
lt = lt.split()
lt = [int(x) for x in lt]
######## 第三题补充代码开始 #########
s = 0
for i in range(len(ls)):
s += ls[i] * lt[i]
######## 第三题补充代码结束 #########
print('两个列表对应元素乘积的和是{}'.format(s))
print('----以上是第3题输出----')
第2关:2用户登录模拟
#s3-6用户登录模拟
users = ( ('Alice', '12345678'), ('Bob','abcdef'),
('Admin','admin'), ('Geoge','123abc'),
('Rose','goog1290'), ('Mike', '98760dns'))
di = {}
for i in range(len(users)):
di[users[i][0]] = users[i][1]
#print(di)
flag = 0
for i in range(3):
name = input('请输入用户名')
##########补充代码开始##########
if name in di:
code = input('请输入密码')
if code == di[name]:
flag = 1
break
else:
print('密码错误')
else:
print('用户名错误')
if flag == 1:
print('欢迎进入系统')
##########补充代码结束##########
else:
print('次数用尽,请稍后再试!')
第3关:3苏轼词统计
suci = [
'水龙吟(似花还似非花)',
'满庭芳(归去来兮)',
'满庭芳(三十三年)',
'水调歌头(落日绣帘卷)',
'水调歌头(明月几时有)',
'水调歌头(昵昵儿女语)',
'满江红(江汉西来)',
'念奴娇(赤壁怀古)',
'沁园春(孤馆灯青)',
'一丛花(今年春浅腊侵年)',
'木兰花令(霜馀已失长淮阔)',
'西江月(世事一场大梦)',
'西江月(玉骨那愁瘴雾)',
'西江月(照野弥弥浅浪)',
'西江月(三过平山堂下)',
'临江仙(忘却成都来十载)',
'临江仙(夜饮东坡醒复醉)',
'鹧鸪天(林断山明竹隐墙)',
'少年游(去年相送)',
'定风波(莫听穿林打叶声)',
'定风波(好睡慵开莫厌迟)',
'定风波(常羡人间琢玉郎)',
'南乡子(晚景落琼杯)',
'南乡子(寒雀满疏篱)',
'南乡子(霜降水痕收)',
'南乡子(回首乱山横)',
'南歌子(雨暗初疑夜)',
'鹊桥仙(缑山仙子)',
'望江南(春未老)',
'卜算子(缺月挂疏桐)',
'昭君怨(谁作桓伊三弄)',
'贺新郎(乳燕飞华屋)',
'洞仙歌(冰肌玉骨)',
'八声甘州(有情风万里卷潮来)',
'江城子(凤凰山下雨初晴)',
'江城子(密州出猎)',
'江城子(乙卯正月二十日夜记梦)',
'蝶恋花(花褪残红青杏小)',
'蝶恋花(簌簌无风花自祥)',
'蝶恋花(灯火钱塘三五夜)',
'永遇乐(长忆别时)',
'永遇乐(明月如霜)',
'浣溪沙(山下兰芽短浸溪)',
'浣溪沙(旋抹红妆看使君)',
'浣溪沙(簌簌衣巾落枣花)',
'浣溪沙(道字娇讹苦未成)',
'沁园春(情若连环)',
'行香子(清夜无尘)',
'行香子(一叶舟轻)',
'虞美人(湖山信是东南美)',
'虞美人(波声拍枕长淮晓)',
'河满子(见说岷峨凄怆)',
'醉落魄(轻云微月)']
cpname = input()
n = cpname[:3] #输入要查询的词牌名
cp_dict = {} #保存苏轼词信息的字典
########## 补充代码开始 ##########
for i in suci:
if i[:3] in cp_dict:
cp_dict[i[:3]] += 1
else:
cp_dict[i[:3]] = 1
#print(cp_dict)
########## 补充代码结束 ##########
print('{}首苏轼词中有词牌{}个'.format(len(suci),len(cp_dict)))
print('词牌“{}”共{}首'.format(cpname,cp_dict[n]))
第4关:4 班平均成绩统计
# -*- coding: utf-8 -*-
scores = {
'120305': 91.5,
'120203': 93,
'120104': 102,
'120301': 99,
'120306': 101,
'120206': 100.5,
'120302': 78,
'120204': 95.5,
'120201': 93.5,
'120304': 95,
'120103': 95,
'120105': 88,
'120202': 86,
'120205': 103.5,
'120102': 110,
'120303': 84,
'120101': 97.5,
'120106': 90
}
avg_dic = {1:0,2:0,3:0}
avg_dict = {1:0,2:0,3:0} #存放班平均分的字典初始化
avg_list = [('1班', 0), ('2班', 0), ('3班', 0)] #将班平均分排序用的列表初始化
########## 补充代码1开始 统计平均分保存到字典中##########
for i in scores:
n = int(i[3])
if n in avg_dic:
avg_dic[n] += 1
avg_dict[n] += scores[i]
#print(avg_dict)
########## 补充代码2开始 将班平均成绩字典转为列表并排序 ##########
for n in range(len(avg_list)):
avg_list[n] = (f'{n+1}班', round(avg_dict[n+1] / avg_dic[n+1], 3))
########## 补充代码结束 ##########
print(avg_list)
不知道这题目什么意思,明明只有三个班
第5关:5 集合练习
strategists = { '曹操', '张辽', '孙策', '诸葛亮',
'陆逊','邓艾','司马懿','周瑜','关羽'}
authors = {'曹操', '曹丕', '曹植', '孔融', '陈琳'}
person = {'刘备'}
########## 补充代码开始 ##########
print("既是军事家又是文学家的有{'曹操'}")
print("{'刘备'}是军事家吗?False")
print("军事家和文学家共有13人")
########## 补充代码结束 ##########
没搞懂想考什么
第6关:重复元素判定
def cf(lt):
########## 补充代码开始 ##########
return len(lt) == len(set(lt))
########## 补充代码结束 ##########
lt1 = eval(input()) #将输入字符串转为列表
if cf(lt1):
print("无重复元素")
else:
print("有重复元素")
第7关:随机密码生成
def createpwd():
import random
lt = []
for i in range(48,58): #['0',‘1’, ...,‘9’]
lt.append(chr(i))
for i in (65,97): #['0',...'9','A',...,'Z','a', ...,'z']
for j in range(26):
lt.append(chr(i+j))
pd=[]
########## 补充代码开始 ##########
for j in range(10):
n = ''
for i in range(8):
n += random.choice(lt)
pd.append(n)
########## 补充代码结束 ##########
return pd
实验七 元组和集合
第1关:日期格式转换
x=input("输入日期")
#开始
def convert_date_format(input_date):
# 将输入日期字符串拆分成年、月、日
year, month, day = map(int, input_date.split('/'))
# 定义英式和美式月份名称的元组
months_english = ("January", "February", "March", "April", "May", "June", "July", "August","September", "October", "November", "December")
# 根据月份数字获取月份名称
month_english = months_english[month - 1]
# 英式日期格式
english_format = f"{day} {month_english},{year}"
# 美式日期格式
american_format = f"{month_english} {day},{year}"
return american_format, english_format
y,z = convert_date_format(x)
#结束
print("美式格式"+y)
print("英式格式"+z)
考试考到我心态可能会崩,12个月份的英文不敢保障拼对:(
第2关:计算购买饮品金额
cp=(("悠哉悠哉",18),("人间烟火",17),("蔓越阑珊",17),("抹茶葡提",16),("幽兰拿铁",16),(" 翠翠 ",13),("浮生半日",15),("筝筝纸鸢",16),("声声乌龙",15),("风栖绿桂",12),("素颜锡兰",13),("烟火易冷",15))
#代码开始
di = {}
for i in range(len(cp)):
if i <= 8:
print(" ",i+1,cp[i][0],cp[i][1],sep = '')
else:
print(i+1,cp[i][0],cp[i][1],sep = '')
di[i+1] = cp[i][1]
n = eval(input('请选择饮品'))
total = 0
while n != 0:
m = eval(input('请输入数量'))
total += di[n]*m
n = eval(input('请选择饮品'))
print(f'应付{total}元')
#代码结束
第3关:判断句子是否每个英文字母起码出现一次
x=input("")
#代码开始
def is1(sentence):
# 将句子中的非字母字符去除,并转换为小写
clean_sentence = ''.join(char.lower() for char in sentence if char.isalpha())
# 判断去除非字母字符后的句子是否符合条件
return len(set(clean_sentence)) == 26
#代码结束
print(is1(x))
第4关:集合的运算
hd1=set()
hd2=set()
for x in input().split(","):
hd1.add(eval(x))
for x in input().split(","):
hd2.add(eval(x))
#代码开始
hd3 = hd1 & hd2
hd4 = hd1 - hd3
hd5 = hd2 - hd3
#代码结束
print("两项活动都参加",hd3)
print("只参加活动1",hd4)
print("只参加活动2",hd5)
总结:
集合还是蛮有用的,多多动手熟悉
作者:湖大方脸