2016-09-28 197 views
-1
import math 

def main(): 
    radius = float(input('What is the radius?')) 
    circle() 
    print('the cirumference is', circum, '.') 
    print('The area is', area, '.') 


def circle(): 
    area = math.pi * radius ** 2 
    circum = math.pi * radius * 2 
    area = '{0:.3f}'.format(area) 
    circum = '{0:.3f}'.format(circum) 

main() 

我在做什么错?我试图从其他功能打印变量,但它不会按预期工作。函数不能访问另一个函数中的变量

+0

你怎么能期望的功能来访问其他函数的局部变量? – Li357

+0

我没有考虑到这一点。我如何让它访问其他变量?为该功能设置新的? –

+0

你了解范围吗?变量只存在于它们的作用域中,所以在'circle'中,一旦函数完成执行,变量就被丢弃。这意味着你不能在'main'中使用它们,因为它们超出了它的范围。你可以A.将它们返回并存储在'main'中,B.使用可以在整个程序中访问的全局变量。 – Li357

回答

0

主要问题是您尝试访问的变量尚未初始化。如果你想访问变量并为它们赋值而不将它们传递给函数和方法,你必须在函数范围之外初始化它们,并且在函数内部明确声明它们是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() 
+0

OMG!工作!现在完全有意义,除了设置等于0.我可以问这是什么吗? –

+0

@JeremySparks正在初始化变量。这些都是你甚至在潜入之前需要知道的一些非常基本的基本技能。 – Li357

+0

@JeremySparks为了让它知道变量存在,你必须初始化变量。 Python抽象它的类型,使其可以是'None','0'或一个空字符串,但通常最好将其初始化为您所期望的值的类型。在你的情况下,一个数值例如'0',因为这些变量是为了存储圈的面积和周长的计算。如果您尝试访问尚未声明的值,则这是必需的。 – zken

0

您正在访问圆函数内的radius变量,但它未在circle函数的范围内定义。所以你运行这个程序时会出错。

每个变量只能在它定义的范围内看到。由于radius变量在main函数中定义,所以radius只能在main的范围内看到。

如果您需要在不同函数之间共享变量,则应该在函数外定义变量,并在函数内声明它们为global,然后程序会知道您想要从全局范围评估变量。 circumarearadius变量类似。

所以,你的代码应该是这样的:

import math 
radius, circum, area = 0, 0, 0 

def main(): 
    global radius, circum, area 
    radius = float(input('What is the radius?')) 
    circle() 
    print('the cirumference is', circum, '.') 
    print('The area is', area, '.') 


def circle(): 
    global radius, circum, area 
    area = math.pi * radius ** 2 
    circum = math.pi * radius * 2 
    area = '{0:.3f}'.format(area) 
    circum = '{0:.3f}'.format(circum) 

main() 
相关问题