湖南大学python头歌实训 实验10:其它组合数据类型

预习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)

总结:

集合还是蛮有用的,多多动手熟悉

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值