2017-01-02 49 views
-2

這是我二十一點遊戲,我每次運行它的時候,我得到這個錯誤:二十一點遊戲錯誤?

Traceback (most recent call last): 
    File "...", line 42, in <module> 
    mydeck = deck() 
    File "...", line 9, in deck 
    deck.append(suit+rank) 
TypeError: Can't convert 'int' object to str implicitly 

(我拿出的位置和文件名),我不知道爲什麼這

正在發生。有人可以幫忙嗎?謝謝!

# Blackjack Game 

import random 

def deck(): 
    deck = [] 
    for suit in ['H','S','D','C']: 
     for rank in ['A',2,3,4,5,6,7,8,9,10,'J','Q','K']: 
      deck.append(suit+rank) 
    random.shuffle(deck) 
    return deck 

def pCount(cards): 
    count = 0 
    aceCount = 0 
    for i in cards: 
     if(i[1] == 'J' or i[1] == 'Q' or i[1] == 'K' or i[1] == 10): 
      count += 10 
     elif (i[1] != 'A'): 
      count += int(i[1]) 
     else: 
      aceCount += 1 
    if aceCount == 1 and count >= 10: 
     count += 11 
    elif aceCount != 0: 
     count += 1 
    return count 

def playingHands(deck): 
     dealerhand = [] 
     playerhand = [] 
     dealerhand.append(deck.pop()) 
     dealerhand.append(deck.pop()) 
     playerhand.append(deck.pop()) 
     playerhand.append(deck.pop()) 

     while pCount(dealerhand) <= 16: 
      dealerhand.append(deck.pop()) 
     return [dealerhand, playerhand] 

game = "" 
mydeck = deck() 
hands = playingHands(dck) 
dealer = hands[0] 
player = hands[1] 

while game != 'exit': 
    dealerCount = pCount(dealer) 
    playerCount = pCount(player) 
    print ('Dealer has: ') 
    print (dealer) 
    print ('Player, you have: ') 
    print (player) 
    if playerCount == 21: 
     print ('Blackjack! Player wins!') 
     break 
    elif playerCount > 21: 
     print ('Player busts! With '+playerCount+' points. Dealer wins!') 
     break 
    elif dealerCount > 21: 
     print ('Dealer busts! With '+dealerCount+' points. Player wins!') 
     break 
    game = input('What would you like to do? H: hit, S: stand? ') 
    if game == 'H': 
     player.append(deck.pop()) 
    elif playerCount > dealerCount: 
     print ('Player wins with ' + playerCount + ' points') 
     print ('Dealer has ' + dealer + ' or ' +dealerCount + ' points') 
     break 
    else: 
     print ('Dealer wins!') 
     print ('Dealer has ' + dealer + ' or ' +dealerCount + ' points')   

。 。 。 。 。 。 。 。 。 .. 。 。 。 。 。 。 。

.. 。 。 。 。 。 。 。

+0

爲什麼在最後那怪異的點?另外,不要在print和函數的參數之間放置空格。 – Lucas

回答

1

我在修好之後嘗試了你的遊戲。現在我可以玩了。

import random 

def deck(): 
    deck = [] 
    for suit in ['H','S','D','C']: 
     for rank in ['A',2,3,4,5,6,7,8,9,10,'J','Q','K']: 
      deck.append(suit+str(rank)) 
    random.shuffle(deck) 
    return deck 

def pCount(cards): 
    count = 0 
    aceCount = 0 
    for i in cards: 
     if(i[1] == 'J' or i[1] == 'Q' or i[1] == 'K' or i[1] == 10): 
      count += 10 
     elif (i[1] != 'A'): 
      count += int(i[1]) 
     else: 
      aceCount += 1 
    if aceCount == 1 and count >= 10: 
     count += 11 
    elif aceCount != 0: 
     count += 1 
    return count 

def playingHands(deck): 
     dealerhand = [] 
     playerhand = [] 
     dealerhand.append(deck.pop()) 
     dealerhand.append(deck.pop()) 
     playerhand.append(deck.pop()) 
     playerhand.append(deck.pop()) 

     while pCount(dealerhand) <= 16: 
      dealerhand.append(deck.pop()) 
     return [dealerhand, playerhand] 

game = "" 
mydeck = deck() 
hands = playingHands(mydeck) 
dealer = hands[0] 
player = hands[1] 

while game != 'exit': 
    dealerCount = pCount(dealer) 
    playerCount = pCount(player) 
    print ('Dealer has: ') 
    print (dealer) 
    print ('Player, you have: ') 
    print (player) 
    if playerCount == 21: 
     print ('Blackjack! Player wins!') 
     break 
    elif playerCount > 21: 
     print ('Player busts! With '+str(playerCount)+' points. Dealer wins!') 
     break 
    elif dealerCount > 21: 
     print ('Dealer busts! With '+str(dealerCount)+' points. Player wins!') 
     break 
    game = raw_input('What would you like to do? H: hit, S: stand? ') 
    if game == 'H': 
     player.append(deck().pop()) 
    elif playerCount > dealerCount: 
     print ('Player wins with ' + playerCount + ' points') 
     print ('Dealer has ' + str(dealer) + ' or ' +str(dealerCount) + ' points') 
     break 

    else: 
     print ('Dealer wins!') 
     print ('Dealer has ' + str(dealer) + ' or ' +str(dealerCount) + ' points') 

測試

$ python pyprog.py 
Dealer has: 
['H2', 'S8', 'HJ'] 
Player, you have: 
['HK', 'C3'] 
What would you like to do? H: hit, S: stand? S 
Dealer wins! 
Dealer has ['H2', 'S8', 'HJ'] or 20 points 
Dealer has: 
['H2', 'S8', 'HJ'] 
Player, you have: 
['HK', 'C3'] 
What would you like to do? H: hit, S: stand? S 
Dealer wins! 
Dealer has ['H2', 'S8', 'HJ'] or 20 points 
Dealer has: 
['H2', 'S8', 'HJ'] 
Player, you have: 
['HK', 'C3'] 
What would you like to do? H: hit, S: stand? H 
Dealer has: 
['H2', 'S8', 'HJ'] 
Player, you have: 
['HK', 'C3', 'H6'] 
What would you like to do? H: hit, S: stand? S 
Dealer wins! 
Dealer has ['H2', 'S8', 'HJ'] or 20 points 
Dealer has: 
['H2', 'S8', 'HJ'] 
Player, you have: 
['HK', 'C3', 'H6'] 
What would you like to do? H: hit, S: stand? H 
Dealer has: 
['H2', 'S8', 'HJ'] 
Player, you have: 
['HK', 'C3', 'H6', 'H6'] 
Player busts! With 25 points. Dealer wins! 
0

問題是你正在用str添加int(如錯誤所述)。 嘗試將它們轉換爲str。

my_list = ['A',2,3,4,5,6,7,8,9,10,'J','Q','K'] 

for i in my_list: 
    print(i) 
# Return the error 

for i in my_list: 
    print(str(i)) 

# print the list