I used python tutor to step through the code and found that there is a bug in user_current_score(). for cards.get(card), it is pulling the "10" dictionary key but seeing it as a 1 instead, then returning None since there is no 1 card. Why would it be seeing a 1 card in the dictionary when there isn’t one there? I know I could do this differently, but I still want to know why it’s pulling the "10" key as a "1" instead and returning "None". If I comment the "10" dictionary key value pair out, there’s no problem with the code so far. If it pulls a 10 though, I get this error:
10
None
Traceback (most recent call last):
File "main.py", line 146, in <module>
user_current_score()
File "main.py", line 133, in user_current_score
user_score += cards.get(card)
TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType'
or
K
10
10
None
Traceback (most recent call last):
File "main.py", line 146, in <module>
user_current_score()
File "main.py", line 133, in user_current_score
user_score += cards.get(card)
TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType'
Code:
import random
cards = {
"A":11,
"2":2,
"3":3,
"4":4,
"5":5,
"6":6,
"7":7,
"8":8,
"9":9,
"10":10,
"J":10,
"Q":10,
"K":10
}
user_hand = []
comp_hand = []
comp_score = 0
temp_hand = []
translation = {39: None}
def deal_card():
temp_hand = []
temp_hand = random.choice(list(cards))
print(temp_hand) #for testing, needs removed
return temp_hand
def user_current_score():
user_score = 0
for card in user_hand:
print(cards.get(card)) #for testing, needs removed
user_score += cards.get(card)
print("Your cards:", str(user_hand).translate(translation) + f", current score: {user_score}")
return user_score
def comp_current_score():
comp_score = 0
for card in comp_hand:
comp_score += cards.get(card)
return comp_score
while len(user_hand) < 5:
user_hand += deal_card()
print(" ")
user_current_score()
>Solution :
You should use append
method to add values to your lists.
When you try to +=
list with str (with more than 1 character) you are actually splitting this str to characters and append them sequentally.
try this one:
while len(user_hand) < 5:
user_hand.append(deal_card())