主要问题是您尝试访问的变量尚未初始化。如果你想访问变量并为它们赋值而不将它们传递给函数和方法,你必须在函数范围之外初始化它们,并且在函数内部明确声明它们是global
。如果您没有明确说明该变量为global
,则它将在正在运行的函数范围内被视为局部变量,并在完成后无法访问。
import math
radius = 0
circum = 0
area = 0
def main():
global radius
radius = float(input('What is the radius?'))
circle()
print ('the cirumference is', circum,'.')
print ('The area is', area,'.')
def circle():
global radius
global circum
area = math.pi*radius**2
circum = math.pi*radius*2
area = '{0:.3f}'.format(area)
circum = '{0:.3f}'.format(circum)
main()
如果你通过了半径为参数circle(arg)
函数调用里面,你可以指定main()
函数中的返回值的变量,并从那里访问它们。
import math
def circle(radius):
area = math.pi*radius**2
circum = math.pi*radius*2
area = '{0:.3f}'.format(area)
circum = '{0:.3f}'.format(circum)
return area, circum
def main():
radius = float(input('What is the radius?'))
area, circum = circle(radius)
print ('the cirumference is', circum,'.')
print ('The area is', area,'.')
main()
你怎么能期望的功能来访问其他函数的局部变量? – Li357
我没有考虑到这一点。我如何让它访问其他变量?为该功能设置新的? –
你了解范围吗?变量只存在于它们的作用域中,所以在'circle'中,一旦函数完成执行,变量就被丢弃。这意味着你不能在'main'中使用它们,因为它们超出了它的范围。你可以A.将它们返回并存储在'main'中,B.使用可以在整个程序中访问的全局变量。 – Li357