分配之前引用的局部变量“age”

问题描述:

我最近开始学习python。并正在处理一个问题。分配之前引用的局部变量“age”

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

阿里纳斯(我想既然你是学习它可能是有用的):把更多的关注代码风格,检查[风格导(https://www.python.org/dev/peps/pep-0008/)。例如,使用'initial_age'而不是'initial_Age',使用骆驼式的方法名('am_i_old','year_passed'),不需要添加';'在行尾,不要使用像'T'和'p'这样的短变量。 –

在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

太棒了。这工作。谢谢 – fahadkaleem