我目前正在嘗試製作一款二十一點遊戲,而且我一直在努力計算手中的總數。如何從列表中的字符串中分離整數?
我的手將包括卡片等級和牌花色如:
hand = ['C9','S4']
我知道,你可以很容易地計算數量,如果沒有串有: 如:
hand = ['9','4']
我可以很容易做到:
hand = map(int,hand)
然後
sum(hand)
但是,我想怎麼用它裏面的字符串呢? 如果除了使用我的方式之外,還有其他很好的計算方法,請隨時發佈。
我目前正在嘗試製作一款二十一點遊戲,而且我一直在努力計算手中的總數。如何從列表中的字符串中分離整數?
我的手將包括卡片等級和牌花色如:
hand = ['C9','S4']
我知道,你可以很容易地計算數量,如果沒有串有: 如:
hand = ['9','4']
我可以很容易做到:
hand = map(int,hand)
然後
sum(hand)
但是,我想怎麼用它裏面的字符串呢? 如果除了使用我的方式之外,還有其他很好的計算方法,請隨時發佈。
如果數值始終是不包括的第一個字符的字符串的一部分,那麼你就可以做到這一點通過
sum([int(s[1:]) for s in hand])
嘿,謝謝它的作品!我想知道爲什麼我不能這樣做: 因爲在手: total = sum(int(s [1:])) 因爲這會給我一個TypeError說'int'對象是不可迭代的? –
這就是說,對於'hand'中的每個''',Python都應該嘗試計算單個整數的和;另一方面,'sum'不知道如何處理'int',但需要迭代。您可以通過將其更改爲'total = sum([int(s [1:])])'來運行它,但結果不符合您的預期。你能看到爲什麼不? – fuglede
而不是做只是一個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)
您可以使用列表中的整數創建一個新列表,然後對其進行求和。只是一個小的for循環。 – Paddy