我有一个带有N个条目的标记数组。我必须根据分数找到学生的等级,即如果2个学生具有相同的分数,那么他们的排名就相同。
y=0
for x in marks:
if marks[N] > marks[N+1]:
rank=rank+1
if marks[N] == marks[N+1]:
rank=rank
y=y+1
这是我试图在其中使用的逻辑,但没有得到所需的答案
例如:
marks = [89,88,79,74,74,74,74,74,64,56,56,25,24]
所以排名应该是
score rank
89 1
88 2
79 3
74 4
74 4
74 4
74 4
74 4
64 9
以此类推。
答案 0 :(得分:0)
欢迎使用StackOverflow。我试图以一种反映您上面描述的逻辑的方式来回答。但是,查看您提供的代码,我建议您阅读一些基本的Python教程。编码愉快!
marks = [89,88,79,74,74,74,74,74,64,56,56,25,24]
current_rank = 0
global_rank = 0
current_mark = 0
for mark in marks:
global_rank += 1
if mark != current_mark:
current_mark = mark
current_rank = global_rank
print(current_mark, current_rank)
答案 1 :(得分:0)
假设列表marks
已经排序,则可以通过将列表本身与列表(但偏移量为1)进行压缩来对相邻标记进行配对,如果相邻标记相同,则可以继续添加与最后一个相同的秩,或者附加当前等级列表的长度加1:
ranks = [1]
for a, b in zip(marks, marks[1:]):
ranks.append(ranks[-1] if a == b else len(ranks) + 1)
print(ranks)
这将输出:
[1, 2, 3, 4, 4, 4, 4, 4, 9, 10, 10, 12, 13]
答案 2 :(得分:0)
学生不会自动生成滚动条
num = 1
def roll():
global num
num += 1
return num