'int'对象不可迭代

时间:2015-01-19 02:29:14

标签: python int iterable

我一直在尝试使用函数获取将其值从字符串更改为int的列表总和

player_hand = [] 

def card_type(player_hand):
 card_value = 0
 if player_hand[0] == 'A':
     card_value = 11
 if player_hand[0] == 'J':
     card_value = 10
 if player_hand[0] == 'Q':
     card_value = 10
 if player_hand[0] == 'K':
     card_value = 10

 if player_hand[0] == '2':
     card_value = 2
 if player_hand[0] == '3':
     card_value = 3
 if player_hand[0] == '4':
     card_value = 4
 if player_hand[0] == '5':
     card_value = 5
 if player_hand[0] == '6':
     card_value = 6
 if player_hand[0] == '7':
     card_value = 7
 if player_hand[0] == '8':
     card_value = 8
 if player_hand[0] == '9':
     card_value = 9
 if player_hand[0] == '1':
     card_value = 10

def player_hit(card_deck):
 rando = random.randint(0,len(card_deck)-1)
 player_hand.append(card_deck[rando])
 card_deck.remove(card_deck[rando])

然后尝试使用

查找播放器列表的总和
card_total = 0

print('Player was handed:')
for i in range(2):
    print(player_hit(card_deck))

for i in len(player_hand)-1:
    print('\n',sum(card_type(player_hand[i])))

然而我收到错误

for i in len(player_hand)-1:
TypeError: 'int' object is not iterable

我不明白问题是什么,因为我已经采用了这些值并将它们转换为int并且已经检查了列表索引范围。请帮忙

2 个答案:

答案 0 :(得分:8)

len(player_hand) - 1只是一个整数,但您编写的代码会尝试遍历它。您需要一个可迭代对象来执行for循环。试试这个:

 for i in range(len(player_hand)):
     # do your thing here

另一种选择是直接在player_hand上迭代,因为它是可迭代的,就像这样:

 for card in player_hand:
     print('\n', card_type(card))

答案 1 :(得分:-1)

这是一个面向对象的版本,可能更容易使用:

from random import shuffle

card_value = {
    "A": 11,    "J": 10,    "Q": 10,    "K": 10,    "1": 10,
    "9": 9,     "8": 8,     "7": 7,     "6": 6,     "5": 5,
    "4": 4,     "3": 3,     "2": 2
}

class Deck:
    def __init__(self):
        self.d = list(card_value) * 4
        shuffle(self.d)

    def hit(self):
        return self.d.pop()

class Player:
    def __init__(self, name):
        self.name = name
        self.hand = []

    def hit(self, deck, num=1):
        for i in range(num):
            self.hand.append(deck.hit())

    def hand_value(self):
        return sum(card_value[card] for card in self.hand)

    def __str__(self):
        return "{}: {} ({} points)".format(self.name, "".join(self.hand), self.hand_value())

def main():
    print("Fresh deck!")
    deck = Deck()
    # deal 3 cards to player 1 and show the result
    p1 = Player("Charles")
    p1.hit(deck, 3)
    print(p1)        # Charles: Q96 (25 points)

if __name__ == "__main__":
    main()