问题
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