首页 > 解决方案 > 如何按字母顺序对列表进行反向排序,但首先是数字

问题描述

我正在编写一个简单的二十一点程序,他们按照我的编码方式我需要将“A”排序到列表的末尾,所以它必须按字母顺序颠倒,并且所有数字都应该在它之前检查

代码的相关部分:

oyuncukart = []
eroskart = []
oyuncuToplam = 0
erosToplam = 0

def Donustur(El,oyuncuTop):
    aTane = El.count("A")
    for kart in El:
        if "2" == kart:
            oyuncuTop += 2
        if "3" == kart:
            oyuncuTop += 3
        if "4" == kart:
            oyuncuTop += 4
        if "5" == kart:
            oyuncuTop += 5
        if "6" == kart:
            oyuncuTop += 6
        if "7" == kart:
            oyuncuTop += 7
        if "8" == kart:
            oyuncuTop += 8
        if "9" == kart:
            oyuncuTop += 9
        if "10" == kart:
            oyuncuTop += 10
        if "J" == kart:
            oyuncuTop += 10
        if "Q" == kart:
            oyuncuTop += 10
        if "K" == kart:
            oyuncuTop += 10
        if "A" == kart and aTane == 1 and oyuncuTop <= 10:
            oyuncuTop += 11
        elif "A" == kart and aTane == 1 and oyuncuTop > 10:
            oyuncuTop += 1
        elif "A" == kart and aTane > 1  and oyuncuTop < 10:
            oyuncuTop += 11
        elif "A" == kart and aTane > 1 and oyuncuTop >= 10:
            oyuncuTop += 1

    return oyuncuTop

kartlar = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]


oyuncukart.append(random.choice(kartlar))
oyuncukart.append(random.choice(kartlar))
oyuncukart.sort(reverse=True)

标签: pythonsorting

解决方案


您不想按数字字母顺序(反转与否)排序;你想要非常特殊的排序顺序2,3,4,5,6,7,8,9,J,Q,K,A

您可以sort在命令本身内部应用自定义顺序:

oyuncukart.sort(key=["2","3","4","5","6","7","8","9","10","J","Q","K","A"].index)

这可能会产生(抽签次数超过 2 次——但这只是关于排序顺序,所以这并不重要)如下所示的序列:

['2', '10', 'J', 'Q', 'A']

推荐阅读