我的代码中有一个奇怪的错误,我可以在大约30场比赛中玩我的游戏,但有时它输出错误而我不知道为什么。游戏是一个BlackJack游戏,我可以将牌拿到玩家,计算机并评估每个牌的价值,但有时候,在玩家完成转牌后,它会输出一个错误。这是错误的一个例子(它有点大)。
File "C:\Users\Carl\Documents\École\Informatique\Tp3\blackjackfinale.py", line 167, in new_game()
return table()
File "C:\Users\Carl\Documents\École\Informatique\Tp3\blackjackfinale.py", line 186, in table
print "Vous avez ces cartes %s avec une valeur total de %d." % (player1_hand, total_player)
TypeError: %d format: a number is required, not NoneType
很抱歉,如果是法语,但重要的是英文。 这是我的代码示例:
def value(hand): #evaluates the hand of the player/computer
total_value = 0
aces = 0
for card in hand:
rank = card[0]
if rank in ('T','V','D','R'):
total_value += 10
elif rank in 'A':
total_value += 11
aces += 1
else:
total_value += int(rank)
if total_value > 21 and aces > 0: #changes the value of the ace if it busts or not
while aces > 0 and total_value > 21:
total_value -= 10
aces -= 1
else:
return total_value
def table():
global deck, mise1, mise2, montant1, montant2
player1_hand = []
player2_hand = []
computer_hand = []
if x == 1:
player1_hand.append(deal_cards())
player1_hand.append(deal_cards())
pbust = False
cbust = False
while True:
total_player = value(player1_hand)
print "Vous avez ces cartes %s avec une valeur total de %d." % (player1_hand, total_player)
if total_player > 21:
print "Vous avez éclaté! Vous avez plus haut de 21."
pbust = True
break
elif total_player == 21:
print "\a BlackJack!"
break #Everything up to this point works well
else:
cr = raw_input("Nouvelle [C]arte ou [R]este: ").lower()
if 'c' in cr:
player1_hand.append(deal_cards())
elif 'r' in cr:
break
else:
break
while True:
computer_hand.append(deal_cards())
computer_hand.append(deal_cards())
while True:
total_computer = value(computer_hand)
if total_computer < 18:
computer_hand.append(deal_cards())
else:
break
print "Le croupier à %s pour un total de %d." % (computer_hand, total_computer)
#here's the error I get, it tells me that the value of total_computer is NoneType but I don't understand why?
希望我能为你理解我的问题并回答所有问题,如果没有,请告诉我,我会尽力解释。对不起,如果我不清楚,因为英语不是我的主要语言,你可以在代码中看到。
哦,显示deal_cards()函数和deck函数
可能很有用def create_deck(): #this creates the deck of cards
suit_string = 'cdtp'
rank_string = '23456789TVDRA'
deck = []
for suit in range(4):
for rank in range(13):
cards = rank_string[rank] + suit_string[suit]
deck.append(cards)
random.shuffle(deck)
return deck
def deal_cards(): #this deals the cards
return deck.pop(0)
答案 0 :(得分:3)
在value
函数中,如果满足此条件
if total_value > 21 and aces > 0:
你没有明确地返回任何内容,所以python隐式返回None
并尝试在
print "Vous avez ces cartes %s avec une valeur total de %d." % (player1_hand, total_player)
这是不可能的。这就是它失败的原因。
答案 1 :(得分:1)
请注意:
def value(hand):
...
if total_value > 21 and aces > 0: #changes the value of the ace if it busts or not
while aces > 0 and total_value > 21:
total_value -= 10
aces -= 1
else:
return total_value
如果您使用ace进行破坏,则值()不会返回total_value。在python中,如果在没有返回任何内容的情况下到达函数的末尾,它将返回None,因此您将获得None。