所需的位置参数:self

时间:2013-05-22 05:26:12

标签: python oop python-3.x self

我是Python的新手,我需要一些帮助。我正在写一个二十一点程序作为家庭作业,我想我可能有它工作,但每当我运行它,它抱怨我没有提供任何“自我”。我以为我没有?这是完整的代码:

class BlackjackPlayer:
    '''Represents a player playing blackjack
    This is used to hold the players hand, and to decide if the player has to hit or not.'''
    def __init__(self,Deck):
        '''This constructs the class of the player.
        We need to return the players hand to the deck, get the players hand, add a card from the deck to the playters hand, and to allow the player to play like the dealer.
        In addition to all of that, we need a deck.'''
        self.Deck = Deck
        self.hand = []

    def __str__(self):
        '''This returns the value of the hand.'''
        answer = 'The cards in the hand are:' + str(self.hand)
        return(answer)

    def clean_up(self):
        '''This returns all of the player's cards back to the deck and shuffles the deck.'''
        self.Deck.extend(self.hand)
        self.hand = []
        import random
        random.shuffle(self.Deck)

    def get_value(self):
        '''This gets the value of the player's hand, and returns -1 if busted.'''
        total = 0
        for card in self.hand:
            total += card
        if total > 21:
            return(-1)
        else:
            return(self.hand)

    def hit(self):
        '''add one card from the Deck to the player's hand.'''
        self.hand.append(self.Deck[0])
        self.Deck = self.Deck[1:]
        print(self.hand)

    def play_dealer(self):
        '''This will make the player behave like the dealer.'''
        total = 0
        for card in self.hand:
            total += card
        while total < 17:
            BlackjackPlayer.hit()
            total += BlackjackPlayer[-1]
            print(self.hand)
        if self.hand > 21:
            return -1
        else:
            return total

当我跑步时,我得到:

TypeError: get_value() missing 1 required positional arguments: 'self'

我很乐意感谢任何帮助,这是我第一次来这里,所以如果我违反规则或事情,我会道歉。

2 个答案:

答案 0 :(得分:2)

我不确定您所显示的代码中存在的问题是因为您实际上并未在其中的任何地方调用 get_value()

这将与您使用此课程的方式有关。您需要确保为该类实例化一个对象并使用它来调用该函数。这样,self会自动添加到参数列表中。

例如:

oneEyedJim = BlackJackPlayer()
score = oneEyedJim.get_value()

最重要的是,你的得分似乎没有考虑到Aces可以是软(1)还是硬(11)这一事实。

答案 1 :(得分:0)

BlackjackPlayer.hit()可能是导致你烦恼的事情。如果要使用类中的函数,则必须创建该类的实例。但是,当您从班级调用函数时,您可以执行以下操作:

self.hit()

此外:

total += BlackjackPlayer[-1]

我不知道你在这里打算做什么,但如果你想访问hand列表,请执行:

total += self.hand[-1]