1

これが私のコードです:

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

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

area が定義されていないと表示されますが、area という変数があります。

4

4 に答える 4

6

areaは関数内のローカル変数です。つまり、その関数の外ではアクセスできません。スコープと関数についてよく読んでください。ここでの最善の解決策は、関数から値を返し、引数を他の関数に渡すことです。

コードがどのように評価されるかを理解していないようです。コードは、一連のステートメントとして順番に実行されます。変数は、定義された後にのみ使用できます。ではArea()、変数を使用しようとしてから変数を定義しています。これは意味がありません。

また、これは文字列から数値を取得する悪い方法であることに注意してくださいeval()(低速であり、目的に合わせて設計されておらず、任意のコードを実行できる)、int()代わりに使用してください。

また、PEP-8CapWordsは、クラスを保持しlowercase_with_underscores、関数名を使用することを推奨しているため、Area()おそらくarea(). これにより、コードの一貫性と読みやすさを維持できます。

于 2012-11-07T00:11:57.250 に答える
0

このコースをご覧になることをお勧めします https://class.coursera.org/programming1-2012-001/class/index

于 2012-11-07T00:22:41.963 に答える
0

あなたがすべき:

  1. Area() 返品し ますarea
  2. Area()fromを呼び出しcost()、その結果を適切に利用します。

最後に、ステートメント内の順序はArea()非常に奇妙に見えます。

于 2012-11-07T00:12:40.820 に答える
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どこにも定義されていません。あなたの意図は、それをメソッドに渡すことです。そのヒントをここに示しました。
  • 変数の順序が正しくありません。使用する前に宣言する必要があります。
于 2012-11-07T00:13:23.370 に答える