Python.<习题五> 列表与元组
11.假设列表lst_info=[[“李玉”,“男”,25],[“金忠”,“男”,23],[“刘妍”,“女”,21],[“莫心”,“女”,24],[“沈冲”,“男”,28]],存放了某单位每个员工的基本信息(包括姓名、性别和年龄)。试编写程序,实现将用户要求的员工信息从列表删除。
(1)需要删除的员工姓名由用户输入。
(2)若用户输入的员工姓名在列表中存在,则执行删除操作;若不存在,则给出相应的提示。
(3)程序可循环执行,当用户输入姓名为“0”时,循环结束。
lst_info=[["李玉","男",25],["金忠","男",23],["刘妍","女",21],["莫心","女",24],["沈冲","男",28]]
name=input("请输入您要删除信息的员工姓名:")
while name!="0":
for info in lst_info:
if info[0]==name:
lst_info.remove(info)
print("删除后的列表:{}".format(lst_info))
break
else:
print("列表中不存在该员工姓名!")
name=input("请输入您要删除信息的员工姓名:")
print("程序结束!")
12.设有列表lst_odd=[1,3,5,7,9]和列表lst_even=[2,4,6,8,10]。试编写程序,将两个列表合并成一个新的列表,并将新列表按照元素的大小降序排列。
不改变列表的元素。
lst_odd=[1,3,5,7,9]
lst_even=[2,4,6,8,10]
newlist=lst_odd.copy()
newlist.extend(lst_even)
newlist.sort()
print(newlist)
13.编写程序,对用户输入的英文字符串中出现的英文字母进行提取(不区分大小写,重复字母只记一次),并将提取的结果按照字母表升序排列后输出。例如,用户输入“I miss you.”,程序输出“i,m,o,s,u,y”或“I,M,O,S,U,Y”。
s=input("请输入一段英文:")
s=s.lower()
lst=[]
for c in s:
if c.isalpha():
if c not in lst:
lst.append(c)
lst.sort()
print(lst)
14.编写程序,生成一年包含20个两位随机整数的列表,将其前十个元素升序排列,后十个元素降序排列。
import random
a=range(10,100)
lst=random.sample(a,20)
lst1=sorted(lst[:10])
lst[:10]=lst1
lst2=sorted(lst[10:],reverse=True)
lst[10:]=lst2
print(lst)
15.编写程序,将用户输入的英文语句中的单词(忽略标点符号)进行逆序排列后输出。例如:用户输入“How are you”,则程序输出“you are How”。
def sentence_reverse(s):
lst=s.split(" ")
return " ".join(lst[-1::-1])
s1=input("请输入一段英文:")
s2=sentence_reverse(s1)
print(s2)
16.假设已有列表lst_floor=[1,4,2,5,7,3],存放了某电梯在一段时间内经过的楼层。试编写程序,实现以下功能。
(1)输出电梯的运行路线(“↑”表示上行一层,“↓”表示下行一层),结果如下:↑↑↑↓↓↑↑↑↑↑↓↓↓↓
lst_floor=[1,4,2,5,7,3]
for i in range(1,len(lst_floor)):
end=lst_floor[i]
start=lst_floor[i-1]
if start<end:
print("↑"*(end-start),end="")
else:
print("↓"*(start-end),end="")
(2)假设运行路线为↑↑↓↓↓↑↑↓↑↑↑↑,且已知初始楼层为2楼,输出经过的各楼层,结果如下:2,3,4,3,2,1,2,3,2,3,4,5,6
route="↑↑↓↓↓↑↑↓↑↑↑↑"
lst_floor=[2]
floor=2
for ch in route:
if ch=="↑":
floor+=1
else:
floor-=1
lst_floor.append(floor)
print(",".join([str(x) for x in lst_floor]))
17.假设已有列表lst_sides=[3,4,5,6,6,6,4,4,3],依次存放了三个三角形的三条边长,试编写程序,利用海伦公式计算每个三角形的面积,并将结果存入列表lst_area。
lst_sides=[3,4,5,6,6,6,4,4,3]
lst_area=[]
for i in range(0,len(lst_sides),3):
a,b,c=lst_sides[i:i+3]
p=(a+b+c)/2
s=p*(p-a)*(p-b)*(p-c)
lst_area.append(s)
print(lst_area)
18.假设有字符串s=“语文:80,数学:82,英语:90,物理:85,化学:88,美术:80”,存放了某个学生的期末成绩。试编写程序,计算该学生所有科目的总分和平均分(保留一位小数)。
s="语文:80,数学:82,英语:90, 物理: 85,化学:88,美术:80"
lst_score=[]
for x in s.split(","):
print(type(x))
print(x)
i=x.index(":")+1
score=int(x[i:])
lst_score.append(score)
zf=sum(lst_score)
print("总分:{}\n平均分:{:.1f}".format(zf,zf/len(lst_score)))
19.假设已有列表lst=[(“triangle”,“shape”),(“red”,“color”),(“square”,“shape”),(“yellow”,“color”),(“green”,“color”),(“circle”,“shape”)],其中每个元素都是一个元组。元组中的每一个元素表示值,第二个元素表示标签。试编写程序,完成以下功能:
(1)将列表lst中的元素按照标签排序后输出。
(2)将所有的颜色值从列表lst中提取出来,存入列表lst_colors,并将该列表输出。
lst=[("triangle","shape"),("red","color"),("square","shape"),("yellow","color"),("green","color"),("circle","shape")]
lst_new=[ [x[1],x[0]] for x in lst ]
print(lst_new)
lst_sort=sorted(lst_new)
print("按照标签排序后的列表:{}".format(lst_sort))
lst_colors=[x[1] for x in lst_sort if x[0]=="color"]
print("颜色列表:{}".format(lst_colors))
20.假设列表lst_suit=[“黑桃”,“红桃”,“梅花”,“方块”],存放了扑克牌的花色。列表lst_face=[“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10”,“J”,“Q”,“K”,“A”,“2”],存放了扑克牌的牌面大小,其元素已按照牌面大小升序排列。试编写程序,完成以下功能。
(1)利用列表生成式,将以上两个列表进行元素搭配,生成一个新的列表,存放所有牌面(不考虑大小王)。新列表lst的内容为:[“3黑桃”,“3红桃”,“3梅花”,“3方块”,“4黑桃”,“4红桃”,“4梅花”,“4方块”,…,“A黑桃”,“A红桃”,“A梅花”,“A方块”,“2黑桃”,“2红桃”,“2梅花”,“2方块”]。
(2)使用random库的shuffle()函数将列表lst中的元素次序打乱。
(3)用户与计算机进行“抽牌比大小”游戏。游戏规则如下。
用户输入序号(范围为0~51)。程序根据序号在列表lst中读取牌面。计算机抽牌由程序自动完成(通过random库中randint()函数随机生成序号)。将用户抽取的牌面与计算机抽取的牌面进行大小比较(不考虑花色),并将结果输出。三种输出内容对照如下:“恭喜,您输了!” “很遗憾,您输了” “咱们平手了!”
import random
lst_suit=["黑桃","红桃","梅花","方块"]
lst_face=["3","4","5","6","7","8","9","10","J","Q","K","A","2"]
lst=[x+y for x in lst_face for y in lst_suit]
random.shuffle(lst)
idx_user = int(input("请您抽一张牌(0~51):"))
card_user=lst[idx_user]
print("您抽到的牌是:{}".format(card_user))
idx_computer=random.randint(0,51)
card_computer=lst[idx_computer]
print("电脑抽到的牌是:{}".format(card_computer))
val_user=lst_face.index(card_user[0])
val_computer=lst_face.index(card_computer[0])
if val_user>val_computer:
print("恭喜,您赢了!")
elif val_user<val_computer:
print("很遗憾,您输了!")
else:
print("咱们平手了!")
21.学校举办朗读比赛,邀请了10位评委为每一名参赛选手的表现打分。假设列表lst_score=[9,10,8,9,10,7,6,8,7,8],存放了某一位参赛选手的所有评委打分。试编写程序,根据以下规则计算该参赛选手的最终得分:
(1)去掉一个最高分
(2)去掉一个最低分
(3)最终得分为剩下8和分数的平均值
lst_score=[9, 10, 8, 9, 10, 7, 6, 8, 7, 8]
lst_score.sort()
lst_score.pop()
lst_score.pop(0)
print("该选手的最终得分为{}".format(sum(lst_score)/len(lst_score)))
22.假设列表lst_weather中存放了一周的天气情况(包括最低气温、最高气温、天气状况、风力和空气质量质量等级)。试编写程序,统计一下数据:
(1)空气质量为优的天数
(2)风力低于3级且最高气温不超过25℃的天数
(3)平均气温低于20℃的天数
测试数据:lst_weather=[[“周一”,“16℃”,“26℃”,“多云”,“1级”,“优”],[“周二”,“17℃”,“27℃”,“晴”,“2级”,“优”],[“周三”,“16℃”,“28℃”,“晴”,“3级”,“优”],[“周四”,“16℃”,“25℃”,“阴”,“2级”,“良”],[“周五”,“15℃”,“24℃”,“阴”,“2级”,“良”],[“周六”,“15℃”,“25℃”,“晴”,“3级”,“优”],[“周日”,“14℃”,“23℃”,“小雨”,“3级”,“良”]]
lst_weather=[["周一", "16℃", "26℃","多云","1级","优"],[ "周二" ,"17℃", "27℃","晴","2级","优"],[ "周三","16℃", "28℃","晴","3级","优"],[ "周四","16℃", "25℃","阴","2级","良"],[ "周五","15℃", "24℃","阴","2级","良"],[ "周六", "15℃", "25℃","晴","3级","优"],[ "周日","14℃", "23℃","小雨","3级","良"]]
number_condition1=[x[0] for x in lst_weather if x[5]=="优"]
print("空气质量为优的天数:{},它们分别是:{}".format(len(number_condition1),",".join(number_condition1)))
number_condition2=[x[0] for x in lst_weather if (int(x[2][:-1])<=25 and int(x[4][:-1])<3)==True]
print("风力低于3级且最高气温不超过25℃的天数:{},它们分别是:{}".format(len(number_condition2),",".join(number_condition2)))
number_condition3=[x[0] for x in lst_weather if (int(x[1][:-1]) + int(x[2][:-1]))/2<20]
print("平均气温低于20℃的天数:{},它们分别是:{}".format(len(number_condition3),",".join(number_condition3)))