世界杯比分的列表和复杂排序

677d1a45cfb8404ab612a2afebb270d9.jpg

 自己写的程序:

list1=["mlg","pty","xby","yl"]
dic={}
for i in list1:
    m=input("请分别输入mlg、pty、xby、yl的胜场数、平场数和败场数,并且用“-”分割:").split("-")
    a,b,c=(int(x) for x in m)
    point=3*a+b
    dic[i]=point                            #添加字典内容
print(m,type(m))                        #split()出来的东西是列表,单个input出来的是字符串
print(dic.items())                       #dict_items([('mlg', 1), ('pty', 5), ('xby', 5), ('yl', 4)])
dic1=sorted(dic.items(),key=lambda x: x[1],reverse=True)   #sorted出来的是列表
print(dic1)                                 #[('pty', 5), ('xby', 5), ('yl', 4), ('mlg', 1)]
dic2=dict(dic1)
list2=[]                                       #具体的分数列表
dic3=[]                                      #key
for x,y in dic1:
    list2.append(y)
    dic3.append(x)
a=1   
for i in range(3):
    if list2[i]!=list2[i+1]:
        print("第{0}的是{1}".format(a,dic3[a-1]))
        a+=1
    else:
        print("第{0}的有两名,是{1}和{2}".format(a,dic3[a-1],dic3[a]))
        print("他俩继续竞争")
        m=input("请输入净胜球数,并用“-”分开:")
        x,y=(int(x) for x in m.split("-"))
        for i in range(2):
            if x>y:
                print("第1名的是{}".format(dic3[a-1]))
                print("第2名的是{}".format(dic3[a]))
                break
            elif x<y:
                print("第1名的是{}".format(dic3[a]))
                print("第2名的是{}".format(dic3[a-1]))
                break
            else:
                print("他俩继续竞争进球数")
                m=input("请输入进球数,并用“-”分开::")
                x,y=(int(x) for x in m.split("-"))
        a+=2
#********************************************************************

题目的解法

 利用了sort和sorted的稳定排序来实现排名。

89660c4d515844668d58aac4ebc87db6.jpg

 由次关键字到主关键字,当次关键字有区别,主关键字相同时。先sort次关键字,再sort主关键字,若此时有项相同,则它们的相对位置与sort次关键字相同。

如见下图:031f35def091477f9449b3c37badfb40.png

 最终程序如下:

730eebb6b6a1498397c30a09081feefd.jpg

  题目来自慕课《Python程序设计》苏州大学

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值