2015-10-15 108 views
2
spades = ['2S','3S','4S','5S','6S','7S','8S','9S','10S','JS','QS','KS','AS'] 
hearts = ['2H','3H','4H','5H','6H','7H','8H','9H','10H','JH','QH','KH','AH'] 
clubs = ['2C','3C','4C','5C','6C','7C','8C','9C','10C','JC','QC','KC','AC'] 
diamonds = ['2D','3D','4D','5D','6D','7D','8D','9D','10D','JD','QD','KD','AD'] 
allCards = spades + hearts + clubs + diamonds 

import random 
random.shuffle(allCards) 

bot1 = [allCards.pop() for i in range(2)] 
print(bot1) 
cardVal = {'2S':1,'3S':2,'4S':3,'5S': 4,'6S':5,'7S':6,'8S':7,'9S':8,'10S':9,'JS':10,'QS':11,'KS':12,'AS':13, 
    '2H':1,'3H':2,'4H':3,'5H': 4,'6H':5,'7H':6,'8H':7,'9H':8,'10H':9,'JH':10,'QH':11,'KH':12,'AH':13, 
    '2C':1,'3C':2,'4C':3,'5C': 4,'6C':5,'7C':6,'8C':7,'9C':8,'10C':9,'JC':10,'QC':11,'KC':12,'AC':13, 
    '2D':1,'3D':2,'4D':3,'5D': 4,'6D':5,'7D':6,'8D':7,'9D':8,'10D':9,'JD':10,'QD':11,'KD':12,'AD':13} 

for i in bot1: 
    print(cardVal[i]) 
    bot1hand = [cardVal[i]] 
print(bot1hand) 

我想將bot1擁有的卡的值放在單獨的數組中,但遇到問題。我總是將兩個值分別打印在不同的行上,而數組bot1hand僅存儲兩個值的最後一個值。如何從字典中提取數值到數組中

例如:

>>> 
['AC', '5C'] 
13 
4 
[4] 
>>> 

回答

3

你的問題就在這裏:

for i in bot1: 
    print(cardVal[i]) 
    bot1hand = [cardVal[i]] 
print(bot1hand) 

特別是這一行:

bot1hand = [cardVal[i]] 

你都在不斷改寫自己的價值,因爲你不實際上正確地附加到您的列表。事實上,你的bot1手機並不被視爲一個列表。

你想要做的第一件事就是初始化它作爲你的循環之外的列表:

bot1hand = [] 

那麼你的循環內,使用它的append方法:

bot1hand.append(cardVal[i]) 

因此,最終的大量的代碼應該看起來像這樣:

bot1hand = [] 
for i in bot1: 
    print(cardVal[i]) 
    bot1hand.append(cardVal[i]) 
print(bot1hand) 

作爲代碼中的最後一個重構步驟,您可以採取行動真正做@NathanielFord所建議的是使用理解(我認爲你已經在你的代碼中使用過,所以你必須已經熟悉它)。我在這個答案中的代碼塊現在可以縮減爲:

bot1hand = [cardVal[i] for i in bot1] 
+0

downvote的任何特定原因? – idjaw

1

您的for循環是問題所在。你可能想嘗試列表comprehension

bot1hand = [cardVal[i] for i in bot1] 
print(bot1hand) 

(我假設的打印語句是調試)

要列出理解處理的實際生成列表,你的責任。