我制作了一个程序,用于计算墙的周长,然后根据输入计算绘制墙壁所需的油漆成本。
代码:
def main():
length = float(input('Enter length: ')) #Get length.
width = float(input('Enter width: ' )) #Get width.
height = float(input('Enter height: ')) #Get height.
Paint_cost()
def Paint_cost (length, width, height): #Find total paint cost.
perimeter = length + width *4 #Find perimiter.
sq_ft = perimeter * height #Find total sq. ft. amount.
Paint = sq_ft / 300 #Calculate paint gallons to nearest int.
round(Paint)
Total= Paint*40 #Calculate total cost.
return total #Display total.
main()
然而,Python一直在说" UnboundLocalError:局部变量' Paint_cost'在转让之前引用"。我在这里做错了什么?
答案 0 :(得分:2)
你有一些问题:
Paint_cost()
内定义函数main()
。您可以在main()
之外定义它,只要在调用main()
函数之前定义它,它就能正常工作。return
从函数返回一个值,而不是打印它。IndentationError
。total
未定义(您将其写为Total
。)Paint_cost()
。您需要使用Paint_cost(length, width, height)
。此代码在Python 3中完美运行:
def Paint_cost (length, width, height): #Find total paint cost.
perimeter = length + width * 4 #Find perimiter.
sq_ft = perimeter * height #Find total sq. ft. amount.
Paint = sq_ft / 300 #Calculate paint gallons to nearest int.
int(Paint)
total = Paint*40 #Calculate total cost.
return total #Display total.
def main():
length = float(input('Enter length: ')) #Get length.
width = float(input('Enter width: ' )) #Get width.
height = float(input('Enter height: ')) #Get height.
print(Paint_cost(length, width, height)) # Print the cost of the paint.
main()
这是针对Python 2的:
def Paint_cost (length, width, height): #Find total paint cost.
perimeter = length + width * 4 #Find perimiter.
sq_ft = perimeter * height #Find total sq. ft. amount.
Paint = sq_ft / 300 #Calculate paint gallons to nearest int.
int(Paint)
total = Paint*40 #Calculate total cost.
return total #Display total.
def main():
length = float(input('Enter length: ')) #Get length.
width = float(input('Enter width: ' )) #Get width.
height = float(input('Enter height: ')) #Get height.
print Paint_cost(length, width, height) # Print the cost of the paint.
main()
具体来说,在这段代码中,print
是Python 2和3之间唯一的变化。该功能在任何一个版本中都无需打印。
如果出现问题,请告诉我。
答案 1 :(得分:0)
您在定义之前调用函数Paint_cost
。将Paint_cost
函数移到main之外,程序应该没有问题。
def Paint_cost (length, width, height): #Find total paint cost.
return length + width *4 #Find perimiter.
sq_ft = perimeter * height #Find total sq. ft. amount.
Paint = sq_ft / 300 #Calculate paint gallons to nearest int.
round(Paint)
return Paint*40 #Calculate total cost.
def main():
length = float(input('Enter length: ')) #Get length.
width = float(input('Enter width: ' )) #Get width.
height = float(input('Enter height: ')) #Get height.
return Paint_cost(length, width, height)
main()
其他说明:您在total
的最后一行返回main()
,但在任何地方都没有定义。 Python区分大小写,因此total
和Total
不是一回事。
答案 2 :(得分:0)
然而,Python一直说“在赋值之前引用了UnboundLocalError:局部变量'Paint_cost'”。我在这里做错了什么?
究竟是什么意思:
Paint_cost()
def Paint_cost (length, width, height): #Find total paint cost.
perimeter = length + width *4 #Find perimiter.
# ...
你在定义它之前调用Paint_cost()
,所以它没有任何东西可以调用,所以它会引发异常。
要解决这个问题,请不要这样做。定义后将调用移至Paint_cost
。或者将Paint_cost
的定义移到全局级别。 (如果它没有访问main
中的任何局部变量,则不需要在main
内定义。)
该消息可能会有些混乱,因为它指的是“分配”,而您正在做的是def Paint_cost(…):
,而不是Paint_cost = …
。但是def
是一种赋值,因为它绑定了一个新名称。