前提申明:我使用了两种解法但是结果都是错误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 人评分