2012-11-07 37 views
1

这这里是我的代码:如何使用其他功能的变量?

def Area(): 
    area = pi * radius * radius 
    pi = 3.14 
    radius = diameter * 2 

def cost(): 
    diameter = eval(input("diamater: ")) 
    print ("Area is", area) 
cost() 

它说没有定义领域,但我有一个变量称为区域!

+0

呃,不应该是'diameter = radius * 2'吗? (或者'radius = float(diameter)/ 2') – Marius

+1

我们怎样才能证明'eval(input(..))'是一件好事?第二个是 –

回答

5

area是一个函数中的局部变量,这意味着在该函数之外,您无法访问它。你应该阅读范围和功能。这里最好的解决方案是从函数返回值,并将参数传递给其他函数。

您似乎缺乏对如何评估代码的理解。代码按顺序依次执行,作为一系列语句。变量只能在定义后才能使用。在Area()中,您正在尝试使用它们之后定义变量。这没有意义。

另请注意,eval()是从字符串中获取数字的不好方法(速度慢,不是为此目的设计的,并且允许任意代码执行),请改为使用int()

还要注意的是PEP-8建议保留CapWords上课,并使用lowercase_with_underscores的函数名,所以Area()也许应该是area()。这将有助于保持代码的一致性和可读性。

0

你应该:

  1. 使Area()area;
  2. 请致电Area()cost(),适当使用其结果。

最后,Area()中的语句顺序的确看起来很奇怪。

+0

,你是什么意思?我必须有两个功能 - 这是我的作业所必需的 –

0

变量被本地化为方法的范围。如果你想从方法使用的值,它return

def area(diameter=1): 
    pi = 3.14 
    radius = diameter * 2 
    area = pi * radius * radius 
    return area 

# Calling the value 
def cost(): 
    diameter = eval(input("diamater: ")) 
    print ("Area is", area(diameter)) 

另外值得一提的是,在原始代码:

  • diameter不被任何定义。你的意图是把它传递给方法;我在这里提供了这个提示。
  • 变量的顺序不正确。在使用之前,必须声明它们为