二十一点游戏错误?

时间:2017-01-02 22:11:40

标签: python

这是我的二十一点游戏,每次运行它都会出现此错误:

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')        

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

.. 。 。 。 。 。 。

2 个答案:

答案 0 :(得分: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!

答案 1 :(得分: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