2017-02-26 44 views
-1

我目前正在嘗試製作一款二十一點遊戲,而且我一直在努力計算手中的總數。如何從列表中的字符串中分離整數?

我的手將包括卡片等級和牌花色如:

hand = ['C9','S4'] 

我知道,你可以很容易地計算數量,如果沒有串有: 如:

hand = ['9','4'] 

我可以很容易做到:

hand = map(int,hand) 

然後

sum(hand) 

但是,我想怎麼用它裏面的字符串呢? 如果除了使用我的方式之外,還有其他很好的計算方法,請隨時發佈。

+0

您可以使用列表中的整數創建一個新列表,然後對其進行求和。只是一個小的for循環。 – Paddy

回答

3

如果數值始終是不包括的第一個字符的字符串的一部分,那麼你就可以做到這一點通過

sum([int(s[1:]) for s in hand]) 
+0

嘿,謝謝它的作品!我想知道爲什麼我不能這樣做: 因爲在手: total = sum(int(s [1:])) 因爲這會給我一個TypeError說'int'對象是不可迭代的? –

+0

這就是說,對於'hand'中的每個''',Python都應該嘗試計算單個整數的和;另一方面,'sum'不知道如何處理'int',但需要迭代。您可以通過將其更改爲'total = sum([int(s [1:])])'來運行它,但結果不符合您的預期。你能看到爲什麼不? – fuglede

1

而不是做只是一個map你可以做兩個map S,一個拿到第二項(假設你要總結的值是第二項):

from operator import itemgetter 
l = ['C9','S4'] 
sum(map(int, map(itemgetter(1), l))) 

但不是對字符串進行操作,你也可以用collections.namedtuple的工作(如輕量級類周圍正常tuple):

from collections import namedtuple 

Card = namedtuple('Card', ['suit', 'rank']) 
l = [Card('C', 9), Card('S', 4)] 
sum(i.rank for i in l) 
相關問題