我尝试执行以下代码,
def dating_age (my_age):
if my_age < 18 & my_age >= 13:
girls_age = my_age/2+5
elif my_age <13:
print ("You are ineligible to date")
else:
girls_age = my_age/2+9
return girls_age
my_age_input = int(input("Enter your age: "))
dating_limit = (dating_age(my_age_input))
if my_age_input < 13:
print (dating_limit)
else:
print ("I can date Girls of" , int(dating_limit) , "and higher")
并收到以下错误:
Enter your age: 12
You are ineligible to date
Traceback (most recent call last):
File "C:/Users/animi/PycharmProjects/LearnPython/Functions.py", line 27, in <module>
dating_limit = (dating_age(my_age_input))
File "C:/Users/animi/PycharmProjects/LearnPython/Functions.py", line 24, in dating_age
return girls_age
UnboundLocalError: local variable 'girls_age' referenced before assignment
Process finished with exit code 1
如果输入13以上的任何内容作为输入,则不会生成错误代码。为什么会发生这样的错误以及如何避免错误?
此外,欢迎任何改进我的编程习惯的提示。
答案 0 :(得分:0)
&
不是布尔运算符,而是使用and
。 &
运算符是按位运算符,与and
运算符的优先级不同。
因此,您的测试解释如下:
my_age < (18 & my_age) >= 13
这确实是一个非常不同的测试。
使用
my_age < 18 and my_age >= 13
或使用链式比较:
13 <= my_age < 18
接下来,当年龄低于13时,您不会将girls_age
设置为任何。你只打印,所以没有任何设置到本地,你得到你的错误。提高错误或返回虚拟值:
def dating_age (my_age):
if 13 <= my_age < 18:
girls_age = my_age / 2 + 5
elif my_age < 13:
print ("You are ineligible to date")
return
else:
girls_age = my_age / 2 + 9
return girls_age
您也可以直接返回值,并在my_age
过低时提前退出;在这个例子中,我使用了一个异常,并使用条件表达式来简化计算:
def dating_age (my_age):
if my_age < 13:
raise ValueError("You are ineligible to date")
return my_age / 2 + (5 if my_age < 18 else 9)
my_age_input = int(input("Enter your age: "))
try:
dating_limit = dating_age(my_age_input)
except ValueError as ex:
print(ex.args[0])
else:
print("I can date girls of {} and higher".format(dating_limit))
答案 1 :(得分:0)
你的问题是你总是返回girls_age变量,而你只在两种情况下定义它。由于无意在第二种情况下定义它(你的年龄在13岁以下),你可以只返回年龄,只要你有一个年龄:
def dating_age (my_age):
if my_age < 18 AND my_age >= 13:
return (my_age/2+5)
elif my_age <13:
print ("You are ineligible to date")
else:
return (my_age/2+9)
答案 2 :(得分:0)
而不是其他编程语言,变量不会在Python中自动初始化。您必须在代码中初始化它们。
因此,当解释器到达return
语句并且my_age < 13
时,girls_age
并不存在,并且Python不会自动初始化它。所以它抱怨没有现有变量:girls_age
未分配。您应该在return
之前设置它。