Python常见编程题解析(二)

python数据结构

列表、元组、字典、集合

——————————-列表与元组——————————-

1.已知列表num1=[4,5,2,7]和num2=[3,6],要求编写程序将这两个列表合并为一个列表,将合并后的元素按照从大到小排序。另外,已知元组tur1=(‘p’,’y’,’t’,[‘o’,’n’]),向元组的最后一个列表前添加新元素’h’

※列表有增加(append、extend、insert),删除(pop、remove、del),排序sort等方法。append()和extend()的区别在于:L1.append(L2)是将L2看成是一个对象,整体打包到L1中的末尾;L1.extend(L2)是将L2中所有元素依次添加到L1的末尾。
♥列表是可变的,元组是不可变的。元组一旦创建完成之后,不能对元素修改。

num1=[4,5,2,7]
num2=[3,6]
num1.extend(num2)
num1.sort(reverse=True)#列表中sort方法默认是升序,通过reverse=True设置为逆序即降序
print("输出:",num1)
tur1=('p','y','t',['o','n'])
#因无法对元组中的元素修改,可以通过list函数把元组转换为列表,在列表中添加元素
list1=list(tur1)
list1.insert(3,'h')
tur2=tuple(list1)#通过tuple函数把列表转换为元组
print(tur2)

2.在某比赛中,共有5位评委给选手打分。计算选手得分时,去掉最高分与最低分,然后求其平均值,该值就是选手的得分。

total_score=[] #创建一个空列表,用于存储5个评委的打分
for i in range(5):
    score=float(input(f"请输入第{i+1}位选手的评分:"))
    total_score.append(score)#把每个评委输入的分数都存到列表中
max_score=max(total_score)#找到列表中的最大值
min_score=min(total_score)#找到列表中的最小值
#remove方法用于删除某个元素
total_score.remove(max_score)
total_score.remove(min_score)
print(total_score)
#sum函数用于计算列表中所以元素的总和,len函数计算列表的长度
avg=sum(total_score)/len(total_score)
print("选手的最终得分是:{:.2f}".format(avg))

3.matrix = [ [1, 3, 5], [2, 6, 8], [7, 9, 4]],要求通过代码将该矩阵进行转置。转置后的矩阵为[[1, 2, 7], [3, 6, 9], [5, 8, 4]]

matrix=[[1,3,5],[2,6,8],[7,9,4]]
new_matrix=[]
for i in range(len(matrix[0])):
#len(matrix[0])找第一行的长度,也就是找此矩阵的列数
    new_row=[] #用来保存新矩阵中每一行的元素
    for old_row in matrix:#遍历矩阵中每一行
    	#当i=1时,第一次循环把第一行中第一个元素添加到new_row列表,第二次循环把第二行中第一个元素添加到new_row列表。。。。
    	#当i=2时,重复遍历矩阵每一行的第二个元素
        new_row.append(old_row[i])
    new_matrix.append(new_row)#把每一行的元素都添加到新矩阵列表中
print(new_matrix)

4.假设运动项目有两个,分别是跑步和游泳,跑步有4个选项:0分钟、20分钟、40分钟、60分钟;游泳有4个选项:0米、200米、400米、600米。
假设每跑步20分钟消耗热量200千卡;每游泳200米消耗热量100千卡。计算所有可能的计划方案消耗的热量,算出最大消耗量和最小消耗量。

run=[0,20,40,60]
swim=[0,200,400,600]
cal=[]
for i in range(len(run)):
    for j in range(len(swim)):
        cal.append(200*i+100*j)
print("可能消耗大的热量:",cal)
print("最大消耗量:{},最小消耗量{}".format(max(cal),min(cal)))

————————————字典————————————

1.商品价格区间设置与排序。假设现在某平台上共有10件商品,每件商品对应的价格如下表:

序号 价格(元)
1 399
2 4369
3 539
4 288
5 109
6 899
7 235

用户根据提示依次输入最小价格和最大价格,选定符合自己需求的价格区间,并按照提示选择排序方式,最终将排序后的价格区间内的价格全部输出。

#使用字典存放表格中的数据
sales={1:399,2:4369,3:539,4:288,5:109,6:899,7:235}
min_price=float(input("请输入最小价格:"))
max_price=float(input("请输入最大价格:"))
price=[] #用来存放最小价格和最大价格范围内的数据
for s in sales.values():#遍历通过values方法获取字典中的所有值
    if min_price<=s<=max_price:
        price.append(s)
sorts=input("1.降序排序  2.升序排序  请选择排序方式:")
if sorts=='1':
    price.sort(reverse=True)
    print("价格降序排序后为:",price)
elif sorts=='2':
    price.sort()#默认升序
    print("价格升序排序后为:",price)
else:
    print("排序方式输入错误!")

2.声明一个列表,在列表中保存6个学生的信息,如下:

student=[{'name:':'小张','age:':23,'score:':85,'tel:':123456789101,'sex:':'男'},
         {'name:':'小王','age:':18,'score:':79,'tel:':123456789102,'sex:':'女'},
         {'name:':'小李','age:':20,'score:':55,'tel:':123456789103,'sex:':'男'},
         {'name:':'小贺','age:':17,'score:':74,'tel:':123456789104,'sex:':'女'},
         {'name:':'小陈','age:':22,'score:':58,'tel:':123456789105,'sex:':'男'},
         {'name:':'小袁','age:':26,'score:':90,'tel:':123456789106,'sex:':'男'}]

要求:a.打印不及格学生的名字和对应的成绩,并统计不及格学生的个数

i=0 #统计不及格学生人数
for s in student:#遍历列表中每一个字典
    if s['score:']<60:
    #s['score:']获取'score:'键对应的值(分数),然后判断每一个字典中分数是否小于60
        i+=1
        print("不及格学生有:{},其成绩为:{}".format(s['name:'],s['score:']))
print("不及格学生有{}人".format(i))

b.统计未成年学生的个数

j=0
for s in student:
    if s['age:']<18: #s['age:']获取'age:'键对应的值(年龄)
        j=j+1
print("未成年学生有{}人".format(j))

c.分别统计男女学生的人数

f=m=0
for s in student:
    if s['sex:']=='男': #s['sex:']获取'sex:'键对应的值(性别)
        m=m+1
    else:
        f=f+1
print("男生有{}人,女生有{}人".format(m,f))

d.计算学生的平均年龄

ages=[] #存储字典中学生的年龄
for s in student:
    ages.append(s['age:'])
print("学生的平均年龄是:",sum(ages)/len(ages))

e.打印手机尾号是5的学生的名字

for s in student:
    if s['tel:']%5==0:
        print("{}的手机尾号是5".format(s['name:']))

f.打印最高分和对应的学生的名字

max_score=student[0]['score:']
for s in student:
    if s['score:']>=max_score:
        max_score=s['score:']
        name=s['name:']
print("最高分是{},其分数是{}".format(name,max_score))

g.将列表按学生成绩从大到小排序

student.sort(key=lambda item:item['score:'],reverse=True)
#lambda表达式,获取每个字典中的分数,以分数作为关键字排序
for s in student:
    print(s)

3.周一到周日的英文依次为Monday、Tuesday、Wednesday、Thursday、Friday、Saturday、Sunday,通过第一或前两个字母判断对应的是哪个单词。

因Tuesday和Thursday的首字母相同, Saturday和Sunday首字母相同, 所以需要比较第二个字符.

sa_or_su={'a':'saturday','u':'sunday'}
tu_or_th={'u':'tuesday','h':'thursday'}
week={'m':'monday','w':'wednesday','f':'friday','s':sa_or_su,'t':tu_or_th}
first=input("请输入第一个字符:")
if first.lower() in week.keys(): #遍历week字典中的所有键
    if first.lower()!='s' and first.lower()!='t': #若输入的是m/w/f
        print(week[first]) #把对应的值输出
    else: #如果输入的是s或t,则需要比较第二个字符
        second = input("请输入第二个字符:")
        if second.lower() in ['a','u','h']:
            print(week[first][second]) #在week字典中找到first键对应的值,再找到该值对应的值
        else:
            print("输入的第二个字符错误!")
else:
    print("输入的第一个字符错误!")
物联沃分享整理
物联沃-IOTWORD物联网 » Python常见编程题解析(二)

发表评论