python成绩排名 排序_成绩排序 (Python代码)

这篇博客探讨了两种Python实现成绩排序的方法。首先介绍了一种通过三次冒泡排序分别按成绩、名字和年龄进行排序的策略,然后展示了一种将这三个条件结合在一起在同一冒泡排序中完成的优化方案。虽然博主在实际测试中遇到了50%的错误率,但代码逻辑清晰,适用于对一组包含姓名、年龄和成绩的学生数据进行综合排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提申明:我使用了两种解法但是结果都是错误50%,但没有找到问题所在,自己测试 了几组特殊数据排序正确的

分析:

方法一:先按成绩冒泡排序,再按名字冒泡排序,再按年龄冒泡排序

方法二:以成绩为排序要点,在该冒泡排序内,如果成绩相等,等判断名字,如果连名字都相等,就判断年龄,按要求调换位置

代码:

```python

代码一:

class student(): #创建学生类

def inputInfo(self,st):

lis=list(st)

self.name=lis[0]

self.age=int(lis[1])

self.grade=int(lis[2])

def getName(self):

return self.name

def getAge(self):

return self.age

def getGrade(self):

return self.grade

n=int(input()) #输入部分

students=[]

while n:

n-=1

st=student()

st.inputInfo(input().split())

students.append(st)

for j in range(len(students)-1): #根据成绩排序,忽略成绩相等的情况

for i in range(len(students)-1-j):

if students[i].getGrade()>students[i+1].getGrade():

students[i],students[i+1]=students[i+1],students[i]

for j in range(len(students)-1): #遍历找到成绩相等的情况,按姓名排序

for i in range(len(students)-1-j):

if students[i].getGrade()==students[i+1].getGrade():

if students[i].getName()>students[i+1].getName():

students[i],students[i+1]=students[i+1],students[i]

for j in range(len(students)-1): #遍历找到成绩名字都相等的情况,按年龄排序

for i in range(len(students)-1-j):

if students[i].getGrade()==students[i+1].getGrade():

if students[i].getName()==students[i+1].getName():

if students[i].getAge()>students[i+1].getAge():

students[i],students[i+1]=students[i+1],students[i]

for i in students: #输出

print(i.getName(),i.getAge(),i.getGrade(),sep=' ')

```python

#######################################

#代码二:

#######################################

class student(): #创建学生类

def inputInfo(self,st):

lis=list(st.split())

self.name=lis[0]

self.age=int(lis[1])

self.grade=int(lis[2])

def getName(self):

return self.name

def getAge(self):

return self.age

def getGrade(self):

return self.grade

students=[] #输入部分

n=int(input())

while n:

n-=1

st=student()

st.inputInfo(input())

students.append(st)

for i in range(len(students)-1):

for j in range(len(students)-1-i): #按成绩排序

if students[j].getGrade()>students[j+1].getGrade():

students[j],students[j+1]=students[j+1],students[j]

elif students[j].getGrade()==students[j+1].getGrade():#当过程中遇到成绩相等的时候,按名字排序

if students[j].getName()>students[j+1].getName():

students[j],students[j+1]=students[j+1],students[j]

elif students[j].getName()==students[j+1].getName():#当成绩名字相等,按年龄排序

if students[j].getAge()>students[j+1].getAge():

students[j],students[j+1]=students[j+1],students[j]

for i in students: #输出

print(i.getName(),i.getAge(),i.getGrade(),sep=' ')

```

```

0.0分

1 人评分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值