我一直在尝试使用函数获取将其值从字符串更改为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并且已经检查了列表索引范围。请帮忙
答案 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()