Ich lerne OOP in Python und habe versucht, dieses kleine Spiel im OOP-Stil zu laufen, aber aus irgendeinem Grund findet das System die Attribute des Objekts nicht.Ratezahl, kein solches Attribut, Python 3
Hier ist das Problem:
Traceback (most recent call last): File "HelloUsername.py", line 47, in <module> newGameGTN = GuessTheNumber() File "HelloUsername.py", line 6, in __init__ self.start_game() File "HelloUsername.py", line 32, in start_game player = player_choice() NameError: name 'player_choice' is not defined
Auf diesem Code in Python 3:
from random import randint
class GuessTheNumber(object):
"""docstring for GuessTheNumber"""
def __init__(self):
self.start_game()
self.player_choice()
self.compare_numbers()
def player_choice(self):
choice = int(input("Choose your number: "))
if choice in range(101):
return(choice)
else:
print("Please enter a number 0-100")
player_choice()
def compare_numbers(self, computer, player):
if player == computer:
return(0)
elif player > computer:
return(1)
elif player < computer:
return(-1)
def start_game(self):
computer = randint(0, 100)
turn = 0
for turn in range(3):
player = player_choice()
x = compare_numbers(computer, player)
print(computer)
if x == -1:
print("too small")
elif x == 1:
print("too big")
elif x == 0:
print("you win")
break
turn += 1
print("game over")
newGameGTN = GuessTheNumber()
newGameGTN.start_game()
Da die Funktionen 'player_choice' und' compare_numbers' innerhalb der Klasse liegen, werden sie intern über das 'self' Objekt weitergegeben. Daher sollte der Aufruf von 'self.player_choice()' funktionieren – jDo
Sie könnten daran interessiert sein, 'classmethod' oder' staticmethod' zu verwenden, da das Objekt nicht wirklich für die Methoden benötigt wird. Sie können [this antwort] (http: // stackoverflow.com/questions/36076506/python3-nameerror-name-method-is-not-defined/36088022#36088022) für eine Beschreibung, wie sie funktionieren, aber jDo habe es genau: Sie müssen 'self.player_choice()' aufrufen statt nur 'player_choice()' –
Was hat das mit Sublime Text zu tun? Bitte markieren Sie Ihren Texteditor nicht, es sei denn, das Problem liegt beim Editor selbst. – MattDMo