2016-09-28 6 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にアクセスしていますが、円の機能の範囲には定義されていません。このプログラムを実行するとエラーが発生します。

すべての変数の唯一それが定義されたスコープで見ることができました。 radius変数はmain関数で定義されたように、radiusのみmainの範囲に見られます。

異なる変数間で変数を共有する必要がある場合は、関数内で変数を定義し、関数内にglobalと宣言する必要があります。プログラムは、グローバルスコープから変数を評価することを認識します。 circumおよびareaは、変数radiusと同様です。

だからあなたのコードは次のようになります。

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() 
関連する問題