关于python:在赋值之前引用的局部变量“age”

Local Variable “age” referenced before assignment

我最近开始学Python。我正在解决一个问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 ("")

我得到的错误显示在下面:

1
2
3
4
5
6
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

输入如下:

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

输出必须是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
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.

你能告诉我我做错了什么吗?谢谢


在python中,必须显式使用self来访问实例属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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