自学Python:选美比赛

作者: 小强聊成长 | 来源:发表于2022-02-12 15:20 被阅读0次

一批选手参加比赛,比赛的规则是最后得分越高,名次越高。当半决赛结束时,要在现场按照选手的出场顺序宣布最后得分和最后的名次,获得相同分数的选手具有相同的名次,名次连续编号,不用考虑同名次的选手人数。例如:选手序号:1,2,3,4,5,6,7选手得分:5,3,4,7,3,5,6。

下面直接上代码:

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

def sortScore(psn, n):#应用冒泡排序法,排序后的数组psn按照score的值从大到小排列

  for i in range(n-1):

    for j in range(n-1-i):

        if psn[j][1] < psn[j+1][1]:

            #交换psn[j]与psn[j+1]

            tmp = psn[j]

            psn[j] = psn[j+1]

            psn[j+1] = tmp

def setRand(psn, n):#指定每一位选手的名次

    j = 1

    psn[0][2] = 1  # 设定第一位选手的名次

    for i in range(n): # 设定psn[2]~psn[n-1]的名次

        if psn[i][1] != psn[i-1][1]:

            psn[i][2] = j

            j += 1

        else:

            psn[i][2] = psn[i-1][2]# psn[i]与psn[i-1]的名次相同

def sortNum(psn, n):#最后再按照选手的序号重新排序,以便能够按照选手的序号输出结果

  for i in range(n-1):

    for j in range(n-1-i):

        if psn[j][0] > psn[j+1][0]: #交换psn[j]与psn[j+1]

            tmp = psn[j]

            psn[j] = psn[j+1]

            psn[j+1] = tmp

def sortRand(psn, n):

    sortScore(psn, n) #以分数为关键字排序

    setRand(psn, n)#按照分数排名次

    sortNum(psn, n) #按照序号重新排序

if __name__ == '__main__':

  #选手的信息组成一个结构体数组

    psn = [[1, 5, 0], [2, 3, 0], [3, 4, 0], [4, 7, 0], [5, 3, 0],\

          [6, 5, 0],[7, 6, 0]]

    sortRand(psn, 7)

    print("序号  分数 名次  ")

    #输出结果

    for i in range(7):

        print("%d%6d%6d" % (psn[i][0], psn[i][1], psn[i][2]))

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

执行结果:

序号 分数 名次

1    5    3

2    3    5

3    4    4

4    7    1

5    3    5

6    5    3

7    6    2

________________END______________

相关文章

网友评论

    本文标题:自学Python:选美比赛

    本文链接:https://www.haomeiwen.com/subject/hyekhrtx.html