主な問題は、あなたがアクセスしようとしている変数が初期化されていないということです。変数にアクセスして関数とメソッドに渡さずに値を代入したい場合は、関数の範囲外でそれらを初期化し、関数内で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