2016-03-22 20 views
0

Python'da OOP öğreniyorum ve bu küçük oyunu OOP stilinde çalıştırmaya çalışıyordum, ancak bazı nedenlerden dolayı sistem nesnenin özelliklerini bulamıyor. piton 3'te bu kodun üzerindeTahmin numarası, böyle bir özellik yok, python 3

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 

:

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() 
+3

'player_choice' ve' compare_numbers' işlevleri * sınıfın içinde * olduğundan, bunlar 'self' nesnesi aracılığıyla dahili olarak geçirilir. Bu nedenle, 'self.player_choice()' işlevini çağırmak – jDo

+0

çalışmalıdır 'classmethod' veya' staticmethod' kullanmak isteyebilirsiniz çünkü bu yöntem için nesne gerçekten gerekli değildir, [bu yanıt] 'a bakabilirsiniz (http: // nasıl çalıştığına ilişkin bir açıklama için stackoverflow.com/questions/36076506/python3-nameerror-name-method-is-not-defined/36088022#36088022) ancak jDo tam olarak aldık: 'self.player_choice() işlevini çağırmanız gerekir. bunun yerine sadece player_choice() ' –

+0

Bunun yerine Sublime Text ile ne ilgisi var? Sorun editörün kendisi değilse, lütfen metin düzenleyicinizi etiketlemeyin. – MattDMo

cevap

0

NameError (sen Sorunun özetle söz olan) AttributeError aynı değildir

İşte sorun bu. NameError istisnası, kodunuzda başvurulan adın mevcut olmadığı anlamına gelir. Bir ad, yerel bir değişken veya bir kapsamdaki bir değişken olabilir.

Bir sınıftaki tüm yöntemlerin, söz konusu sınıfın bir örneğinde çağrılması gerekir. (staticmethods ve classmethods dayanılmaz) name = player_choice() yerine name = self.player_choice() yazmanız gerekir. Aynı şekilde sınıfta tanımlanan bir yöntemi çağırdığınız diğer tüm olaylar için.

İlgili konular