'int'对象不可迭代

Dhr*_*v S 2 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])
Run Code Online (Sandbox Code Playgroud)

然后尝试使用找到播放器列表的总和

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])))
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误

for i in len(player_hand)-1:
TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)

我不明白问题是什么,因为我已经采取了值并将它们转换为int已经以及检查列表索引范围.请帮忙

VHa*_*sop 8

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

 for i in range(len(player_hand)):
     # do your thing here
Run Code Online (Sandbox Code Playgroud)

另一种方法是直接player_hand迭代,因为它是可迭代的,就像这样:

 for card in player_hand:
     print('\n', card_type(card))
Run Code Online (Sandbox Code Playgroud)

  • 这正确地诊断了错误.提问者应该注意,`card_type`函数需要一系列字符(一个"手")而不是你传递的单个字符.这实际上是有效的,因为即使单个字符串也是一个序列类型,但它表明设计有点混乱(可能`card_type`应该期望一张卡作为其参数并跳过`[0]`索引) .此外,`player_hit`返回`None`(因为没有`return`语句),但是你打印结果. (2认同)