2016-01-20 2 views
1

Недавно я начал изучать питон. И я работаю над проблемой.Локальная переменная «возраст», на которую ссылаются перед назначением

class Person: 
    age = 0 
    def __init__(self,initial_Age): 
     if initial_Age<0: 
      age=0 
      print("This person is not valid, setting age to 0.") 
     else: 
      age = initial_Age 

    def amIOld(self): 
     if(age<13): 
      print("You are young.") 
     elif(age>=13 and age<18): 
      print("You are a teenager.") 
     else: 
      print("You are old.") 
    def yearPasses(self): 
     age = age + 1 
T=int(input()) 
for i in range(0,T): 
age=int(input())   
p=Person(age) 
p.amIOld() 
for j in range(0,3): 
    p.yearPasses();   
p.amIOld(); 
print ("") 

Я получаю ошибку отображается ниже:

Traceback (most recent call last): 
File "solution.py", line 27, in <module> 
p.yearPasses();   
File "solution.py", line 19, in yearPasses 
age = age + 1 
UnboundLocalError: local variable 'age' referenced before assignment 

Входной для этого идет как:

4(Number of test cases) 
-1 
10 
16 
18 

Выход должен быть чем-то вроде этого:

This person is not valid, setting age to 0. 
You are young. 
You are young. 

You are young. 
You are a teenager. 

You are a teenager. 
You are old. 

You are old. 
You are old. 

Можете ли вы, пожалуйста, направить меня на w шляпа, я делаю неправильно ?. Благодаря

+0

Sidenote (я думаю, что это может быть полезно, так как вы учитесь): уделять больше внимания стилю кода, проверьте [стиль руководство] (https://www.python.org/dev/peps/pep-0008/). Например, используйте 'initial_age' вместо' initial_Age', используйте имена методов с именем верблюда ('am_i_old',' year_passed'), не нужно добавлять ';' в конце строки не используйте короткие переменные типа 'T' и' p'. –

ответ

5

В Python вы должны использовать явно self для доступа атрибутов объекта:

class Person: 
    def __init__(self, initial_Age): 
     if initial_Age < 0: 
      self.age = 0 
      print("This person is not valid, setting age to 0.") 
     else: 
      self.age = initial_Age 

    def amIOld(self): 
     if self.age<13: 
      print("You are young.") 
     elif self.age>=13 and self.age<18: 
      print("You are a teenager.") 
     else: 
      print("You are old.") 

    def yearPasses(self): 
     self.age += 1 
+0

Awesome. Это сработало. благодаря – fahadkaleem

Смежные вопросы