所以我正在用python創建一個紙牌游戲。對于我目前正在處理的游戲部分,我需要檢查一組撲克牌以查看是否有任何對。一對被認為是具有相同價值和顏色的兩張牌。例如,紅心之王和鉆石之王是一對,但紅心之王和梅花之王不是。
我需要回傳一個洗掉所有對的新串列。
假設我們有
list = ['9?', '5?', 'K?', 'A?', 'K?', 'K?', '2?', 'Q?', 'K?', 'Q?', 'J?', 'A?', '4?', '5?', '7?', 'A?', '10?', 'Q?', '8?', '9?', '10?', 'J?', '10?', 'J?', '3?']
結果應該是:
list without pairs = ['10?', '2?', '3?', '4?', '7?', '8?', '9?', '9?', 'A?', 'A?', 'A?', 'J?', 'J?', 'J?', 'K?', 'K?', 'K?', 'K?', 'Q?']
我目前有這個代碼:
import random
result=[]
for i in range(len(l)):
if '?' in l[i]:
pass
elif '?' in l[i]:
pass
elif '?' in l[i]:
pass
elif '?' in l[i]:
pass
random.shuffle(result)
return result
uj5u.com熱心網友回復:
cards_list = [
"9?",
"5?",
"K?",
"A?",
"K?",
"K?",
"2?",
"Q?",
"K?",
"Q?",
"J?",
"A?",
"4?",
"5?",
"7?",
"A?",
"10?",
"Q?",
"8?",
"9?",
"10?",
"J?",
"10?",
"J?",
"3?",
]
SAME_COLORS = {"?": "?", "?": "?", "?": "?", "?": "?"}
list_without_pairs = []
for card in cards_list:
if card[:-1] SAME_COLORS[card[-1]] in cards_list:
continue
else:
list_without_pairs.append(card)
print(list_without_pairs)
輸出:
['9?', '2?', 'Q?', 'A?', '4?', '7?', '10?', '8?', '9?', 'J?', '3?']
這項作業完全相同,但可能會更加混亂:
list_without_pairs = [card for card in cards_list if card[:-1] SAME_COLORS[card[-1]] not in cards_list]
uj5u.com熱心網友回復:
您可以使用以下代碼。它基于按數字排序,然后比較連續卡片的顏色。比較顏色基于序數邏輯:
def get_card(card):
return (card[:-1], card[-1]) # save number and color
if __name__ == "__main__":
mylist = ['9?', '5?', 'K?', 'A?', 'K?', 'K?', '2?', 'Q?', 'K?', 'Q?', 'J?', 'A?', '4?', '5?', '7?', 'A?', '10?', 'Q?',
'8?', '9?', '10?', 'J?', '10?', 'J?', '3?']
# Sort the cards based on numbers
mylist.sort(key=lambda x: x[0])
print(mylist)
output = []
index = 0
while index < len(mylist)-1:
# Compare successive two cards
first_card = get_card(mylist[index])
second_card = get_card(mylist[index 1])
print(f"Comparing {first_card} and {second_card} -- {ord(first_card[1])} {ord(second_card[1])} = {ord(first_card[1]) ord(second_card[1])}")
# check the number
if (first_card[0] == second_card[0]):
# check the color
ord_val = ord(first_card[1]) ord(second_card[1])
if (first_card[1] == second_card [1] or ord_val % 10 == 1 ):
# same card, skip this card
index = 1
else:
# add card to output, dont skip next card
output.append(mylist[index])
print("\tAdding card")
else:
output.append(mylist[index])
print("\tAdding card")
index = 1
print(output)
邏輯:
使用序數值來比較顏色。相同顏色的序數總和(根據問題陳述中的顏色符號)相等,最后一位數為 1。Ord 值:
"""
?: 9824 - black - spade
?: 9827 - black - club
?: 9825 - red - heart
?: 9826 - red - diamond
"""
Spade club = 9824 9827 = 19651
heart diamond = 9825 9826 = 19651
輸出:
['10?', '2?', '3?', '4?', '7?', '8?', '9?', '9?', 'A?', 'A?', 'A?', 'J?', 'J?', 'J?', 'K?', 'K?', 'K?', 'K?', 'Q?']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/332700.html
上一篇:“串列”物件不能解釋為整數-有沒有辦法將串列轉換為整數?
下一篇:迭代資料框并從串列中添加專案
