'int' object not iterable

旧城冷巷雨未停 提交于 2021-02-07 09:27:55

问题


i've been trying to get the sum of list that changed its values from a string to int using a function

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])

and then try to find the sum of the player list using

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])))

however i get an error

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

i don't understand what the problem is because ive taken the values and converted them into int's already as well as checked the list index range. Please help


回答1:


len(player_hand) - 1 is just an integer, but the code you've written tries to loop over it. You need an iterable object to perform a for loop. Try this:

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

An alternative would be iterating directly over player_hand since it is iterable, just like this:

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



回答2:


Here is an object-oriented version which may be easier to work with:

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()


来源:https://stackoverflow.com/questions/28017142/int-object-not-iterable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!