将列表作为参数发送,但不断发送空列表

时间:2017-04-01 23:06:03

标签: python

你好,我正在用Python写一个二十一点游戏。我在播放器类中遇到一个名为calculateTemporaryHandValueWhereAEquals11()的方法有问题。它由一个名为drawCard()的经销商类中的方法调用。问题是第一个if语句。如果经销商手中有A,那么它将调用calculateTemporaryHandValueWhereAEquals11(self.player)来检查hand的值是否为= 21,假设A等于11.由于某种原因,该列表为空且在calculateTemporaryHandValueWhereAEquals11中没有任何反应( ) 方法。但是在drawCards()中的elif语句中,我调用了一个名为calculateTemporaryHandValueWhere()的函数,该函数检查手的值,假设A等于1.这一个工作,它获取列表并计算值!我不明白我在做什么使得一种方法起作用而不是另一种方法。如果有人可以提供帮助,将不胜感激!谢谢!

import random 
class Player(object):    
def drawCard(self, hitOrStop):
    if hitOrStop == 'hit':
        playerRecievesCard = RandomCard().selectRandomCard()
        self.myHand.append(playerRecievesCard)
        return True
    else:
        return False

def calculateTemporaryHandValue(self, playersHand = []):
    sumOfAllCards = 0
    for card in playersHand:
        if card == 'A':
            sumOfAllCards += 1
        elif card == 'J' or card == 'K' or card == 'Q':
            sumOfAllCards += 10
        else:
            sumOfAllCards += card
    return sumOfAllCards
def calculateTemporaryHandValueWhereAEquals11(self, playerHand = []):
    sumOfAllCards = 0
    print(playerHand)
    for card in playerHand:
        if card == 'A':
            sumOfAllCards += 11
        elif card == 'J' or card == 'K' or card == 'Q':
            sumOfAllCards += 10
        else:
            sumOfAllCards += card
    return sumOfAllCards

class Dealer(Player):
def __init__(self):
    self.myHand = []
def drawCards(self):
    if 'A' in self.myHand:
        valueOfdeal = Dealer.calculateTemporaryHandValueWhereAEquals11(self.myHand)
        print (valueOfdeal)
        #if Dealer.calculateTemporaryHandValueWhereAEquals11(self.myHand) <= 21 and Player.calculateTemporaryHandValueWhereAEquals11(self.myHand) >= 17:
        print ("he")
        return False
    elif Dealer.calculateTemporaryHandValue(self.myHand) < 17 and len(self.myHand) <=5:
        playerRecievesCard = RandomCard().selectRandomCard()
        self.myHand.append(playerRecievesCard)
        return True
    else:
        return False

1 个答案:

答案 0 :(得分:0)

您不应该调用类Dealer.calculateTemporaryHandValueWhereAEquals11(self.myHand)上的方法,而应调用实例self.calculateTemporaryHandValueWhereAEquals11(self.myHand)上的方法。

当您这样做时,该方法将参数self.myHand作为第一个参数self而不是第二个参数playerHand。如果该方法没有playerHand = []的默认参数,您将获得TypeError: [method] takes exactly 2 arguments (1 given)