Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用python根据卡片的套件和值对卡片进行排序_Python 3.x_Sorting_Playing Cards - Fatal编程技术网

Python 3.x 使用python根据卡片的套件和值对卡片进行排序

Python 3.x 使用python根据卡片的套件和值对卡片进行排序,python-3.x,sorting,playing-cards,Python 3.x,Sorting,Playing Cards,有人能帮我把卡片按组别和VULE分类吗? 我有: 我需要得到: [('♥', '7'), ('♥', '9'), ('♥', '10'),('♥', 'J'), ('♦', '10'), ('♦', 'J')] 我尝试过这样的方法: return list_cards.sort(key=lambda c: (NAME_TO_VALUE[c[0]], c[1])) return sorted(list_cards, key=lambda c: (NAME_TO_VALUE[c[0]], c[1]

有人能帮我把卡片按组别和VULE分类吗? 我有:

我需要得到:

[('♥', '7'), ('♥', '9'), ('♥', '10'),('♥', 'J'), ('♦', '10'), ('♦', 'J')]
我尝试过这样的方法:

return list_cards.sort(key=lambda c: (NAME_TO_VALUE[c[0]], c[1]))
return sorted(list_cards, key=lambda c: (NAME_TO_VALUE[c[0]], c[1]))
return sorted(list_cards)
等等

但结果与我想要的不同。 以下是完整的代码:

NOMINALS = ['7', '8', '9', '10', 'J', 'Q', 'K', 'A']
NAME_TO_VALUE = {n: i for i, n in enumerate(NOMINALS)} -> :<class 'dict'>: {'7': 0, '8': 1, '9': 2, '10': 3, 'J': 4, 'Q': 5, 'K': 6, 'A': 7}
list_cards = [('♥', '9'), ('♥', 'J'), ('♦', 'J'), ('♥', '7'), ('♥', '10'), ('♦', '10')]

def sort_hand():
    # return list_cards.sort(key=lambda c: (NAME_TO_VALUE[c[0]], c[1]))
    # return sorted(list_cards, key=lambda c: (NAME_TO_VALUE[c[0]], c[1]))
    return sorted(list_cards)
NOMINALS=['7','8','9','10','J','Q','K','A']
NAME_TO_VALUE={n:i for i,n in enumerate(NOMINALS)}->:{7':0,'8':1,'9':2,'10':3,'J':4,'Q':5,'K':6,'A':7}
列表卡=[('♥', '9'), ('♥', 'J'),('♦', 'J'),('♥', '7'), ('♥', '10'), ('♦', '10')]
def sort_hand():
#返回列表\u cards.sort(key=lambda c:(名称\u到\u值[c[0]],c[1]))
#返回已排序的(列表卡,键=lambda c:(名称到值[c[0]],c[1]))
已排序的返回(列表卡)
一种方法是简单地使用助手函数将卡片转换为有序位置,然后使用这些有序位置进行排序

例如:

#它们决定排序顺序,如果需要不同的顺序,则会更改。
SuiteMap=['♠', '♣', '♦', '♥']
面图=['2','3','4','5','6','7','8','9','10','J','Q','K','A']
def cardToOrd(卡德瓦尔):
返回13*suitMap.index(cardVal[0])+faceMap.index(cardVal[1])
def ordToCard(ordVal):
返回(suitMap[ordVal//13],faceMap[ordVal%13])
def分类卡(卡片列表):
新列表=[cardToOrd(i)代表cardList中的i]
newList.sort()
return[ordToCard(i)代表新列表中的i]
卡片=[('♥', '9'), ('♥', 'J'),('♦', 'J'),('♥', '7'), ('♥', '10'), ('♦', '10')]
打印(卡片)
打印(分类卡(卡片))
如果有可能使用无效的卡,您可以使其更加健壮。按照以下更改顺序转换函数将强制无效的卡
(“?”,“?”)
,并将它们放在末尾:

def cardToOrd(cardVal):
尝试:
返回13*suitMap.index(cardVal[0])+faceMap.index(cardVal[1])
除:
返回99999
def ordToCard(ordVal):
尝试:
返回(suitMap[ordVal//13],faceMap[ordVal%13])
除:
返回(“?”,“?”)


顺便说一句,这可能是我放在类中的东西(例如,
cardset
deck
),这样我就可以将所有卡片处理代码收集到一个连贯的对象中。我将把它作为读者的练习:-)

如果你知道卡片是有效的,也许你可以创建两个字典来存储你想要的套装和等级的顺序:

SUITS = ['♥', '♦', '♠', '♣']
RANKS = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
SUIT_ORDER = {suit: order for order, suit in enumerate(SUITS)}
RANK_ORDER = {rank: order for order, rank in enumerate(RANKS)}

list_cards = [('♥', '9'), ('♥', 'J'), ('♦', 'J'), ('♥', '7'), ('♥', '10'), ('♦', '10'), ('♠', '6'), ('♣', 'A')]
sorted_list_cards = sorted(list_cards, key=lambda c: (SUIT_ORDER[c[0]], RANK_ORDER[c[1]]))
print(sorted_list_cards)
输出:

[('♥', '7'), ('♥', '9'), ('♥', '10'), ('♥', 'J'), ('♦', '10'), ('♦', 'J'), ('♣', 'A'), ('♠', '6')]

hi可能使用
NAME\u TO\u VALUE[c[1]]
作为基数值(而不是
c[0]
作为套装`)顺便说一句,这是一个奇怪的排序方案,上升花色通常是黑桃、梅花、钻石和红桃。至少对于我玩过的所有订购花色的游戏来说,这可能是世界上所有纸牌游戏的0.0000001%:-)如果我使用
NAME\u TO\u VALUE[c[0]
则我得到
keyrerror:'♥'类似于我使用的其他类型的方法。如果
NAME\u TO\u VALUE[c[0]]
我得到了
而且排序的方式也不重要)举个例子,很多,兄弟!效果很好!我花了几个小时,但失败了,你在我发布后10分钟内就给了我答案。)@Vladimir,既然你是个好人,我已经做了一些改变,让它处理
10
,而不是
T
:-)谢谢您的帮助!非常感谢:-)这是唯一的方法。字符串是给人的。计算机用数字表示事物。只需将字符串转换为/从字符串转换为I/O。非常感谢您的帮助!此代码也解决了我的问题!)
[('♥', '7'), ('♥', '9'), ('♥', '10'), ('♥', 'J'), ('♦', '10'), ('♦', 'J'), ('♣', 'A'), ('♠', '6')]