2012-11-07 69 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不被任何定義。你的意圖是把它傳遞給方法;我在這裏提供了這個提示。
  • 變量的順序不正確。在使用之前,必須聲明它們爲