我必须添加两个属性

时间:2018-12-19 02:46:53

标签: python python-3.x

我正在尝试在代码中创建属性“得分”和“学习”。 我收到这些错误:

  

AttributeError:“ HumanPlayer”对象没有属性“ score”,并且   “学习”。

请参阅以下代码的某些部分:

#Create random player class
class RandomPlayer:
    def __init__(self):
        Player.__init__(self)

    def move(self):

        self.move = RandomPlayer
        #use imported random function
        RandomPlayer = random.randint(1,3) 

        #Computer choice is either rock, paper, or scissors 
        if RandomPlayerMove == ("Rock"): 
            print("The computer choses ROCK") 
        elif RandomPlayerMove == ("Paper"): 
            print("The computer choses PAPER") 
        else: 
            print("The computer choses SCISSORS") 

        #return value 
        return RandomPlayer 



#Create human player class        
class HumanPlayer:
    def __init__(self):
        Player.__init__(self)

    def move(self):
        while True:
            HumanPlayer = input("'Rock', 'Paper', or 'Scissors' ")
        #Detect invalid entry
            if HumanPlayer.lower() not in moves:
                print('Please choose Paper, Rock or Scissors: ')
            else:
                break
        return HumanPlayer



class Game:

    def __init__(self, HumanPlayer, RandomPlayer):
        self.player1 = HumanPlayer
        self.player2 = RandomPlayer
        self.player1_score = 0
        self.player2_score = 0

    def play_round(self):

        move1 = self.player1.move()
        move2 = self.player2.move()
        print(f"Player 1: {move1}  Player 2: {move2}")
        self.player1.learn(move1, move2)
        self.player2.learn(move2, move1)

        if (move1 == move2):
            print("it's a tie!")

        elif beats(move1, move2) is True:
                self.player1_score += 1
        elif beats(move2, move1) is True:
                self.player2_score += 1

        print("It's Tie, Play again!")
        print(f"Scores, HumanPlayer: {self.player1.score} RandomPlayer: {self.player2.score}")
        print("Game over!")

1 个答案:

答案 0 :(得分:0)

我很确定这是由于错字造成的。您可能不需要self.player1.score,而不是在倒数第二条print中使用self.player1_score,因为这是您在__init__中定义的属性。同样,您以后可能希望以相同格式的字符串代替self.player2_score来使用self.player2.score

虽然这似乎不是造成您当前问题的原因,但我想提出另一个建议:避免在不同的事物上使用相同的名称。在很多地方,实例和类都使用相同的名称。例如,您的Game类采用名为HumanPlayerRandomPlayer的参数,它们用这些名称隐藏了这些类。您还在每个move方法中将类名用作变量名。这将使错误解决噩梦!使用唯一的名称。 Python约定是对类使用CapitalizedNames,对其他大多数变量(包括函数和方法名)使用lowercase_names_with_underscores,对常量使用ALL_CAPS(在极少数情况下需要使用它们),但是如果您愿意,可以使用自己的风格(只需保持一致!)。