PAT 1004成绩排名

**

一.题目内容**

在这里插入图片描述

**

二.题目分析**

本问题分为两个部分。
1.输入数据处理
2.进行数据排序,找到最大最小值

第一个部分,本来采用的是空格判定方法,但是并不理想,似乎无法判定,折腾了一番后变放弃了。

for i in range(int(number)):
 single=input()
 for p in single:
  num,n=1,2
  while n>0:
   if p=='':
    num+=1
    n-=1
   else:
	  num+=1
 number-=1

于是改为使用split函数。这是举出split函数使用的一个例子。input().split(‘’,0)。括号前半部分对应以什么符号为标志划分,后半部分数字代表划分几段,一段对应-1,二段对应零。

names,grades=[],[]
number=input()
while int(number)>0:
	text=input().split()
	name=text[0]+text[1]
	grade=text[2] 
	grades.append(str(grade))
	names.append(name)
	number=int(number)
	number -= 1

第二部分,***进行排序找最大最小。有列表遍历排序法,字典对应寻找法。***代码分别为

good,bad=-10000,10000
max,min=0,0
for i in range(len(grades)):
	if int(grades[i])>good:
		good=int(grades[i])
		max=i
	if int(grades[i])<	bad:
	  bad=int(grades[i])
	  min=i
good,bad=-1000,1000
for i in range(number):
 if int(grades[i])>good:
		good=int(grades[i])
 if int(grades[i])<	bad:
	  bad=int(grades[i])
good=str(good)
bad=str(bad)
max=message[good]
min=message[bad]

三.未解思路

问如何对字典进行键或值排序,代码如下

message={}
grades=[]
number=input()
number=int(number)
for i in range(number):
	text=input().split()
	name=text[0]+text[1]
	grade=text[2]
	grades.append(grade)
	message[grade]=name 
	number=int(number)
good,bad=-1000,1000
for i in range(number):
 if int(grades[i])>good:
		good=int(grades[i])
 if int(grades[i])<	bad:
	  bad=int(grades[i])
good=str(good)
bad=str(bad)
max=message[good]
min=message[bad]
print(max)
print(min)

21.3.4更新版

number=int(input())
text0=[]
for p in range(number):
    text=input().split()
    text[-1]=int(text[-1])
    text0.append(text)
text0=sorted(text0,key=lambda x:x[-1],reverse=True)
if number>1:
  text0[0].pop()
  text0[-1].pop()
else:
    text0[0].pop()
print(' '.join(text0[0]))
print(' '.join(text0[0]))

知识点1.数字字符串首字母开始比较起2.列表内元素格式不必统一3.extend,相加只接受一个列表,append可接受多个列表4.sort文本在前,reverse永远在最后5,text.pop(索引,无索引默认最后一个)/del(text[i])/remove(具体元素)
第二次修改版

number=int(input())
text0=[input().split() for p in range(number)]
text0=sorted(text0,key=lambda x:int(x[-1]),reverse=True)
print(' '.join(text0[0][0:2])+'\n'+' '.join(text0[-1][0:2]))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值