2

私は初心者のプログラミングクラスに所属しており、インストラクターは使用する言語としてPythonを選択しました。彼は私たちに非常に単純な割り当てを与えてくれました。これを投稿します。また、私が思いついたコードも投稿します。なぜこれがうまくいかないのか理解できないので、私はそのようなばかげたような気がします。私はグローバル定義エラーを受け取り続けます、そして私たちが質問をするならば、先生は私たちが宇宙のスカムであるように私たちを見ます。

割り当ては次のとおりです。

ユーザーにキロメートル単位の距離を入力し、その距離をマイルに変換するように求めるモジュラーPythonプログラムを設計します。

プログラムは、プログラムを実行している人から停止するように指示されるまで、新しい入力をループする必要があります。

ヒント:ゼロ(0)キロメートルの入力を使用してプログラムを停止できます

換算式は次のとおりです。マイル=キロメートル*0.6214

少なくとも3つのモジュールが必要です。

  1. 入力
  2. 計算する
  3. 印刷

そして、私が思いついたコードは次のとおりです。

def main(ans):
    while ans=='yes':
        data()
        calculate()
        words()

def data():
    print 'Enter Kilometers Please'    
    kilometers=input()
    return

def calculate():
    miles=kilometers*0.6214
    print miles

def words():
    print 'The number of miles is',
    print 'Enter another number?'

ans='yes'
main(ans)

誰かが私が間違っていることを教えてもらえますか?私たちはまだ始めたばかりであり、これらのフォーラムで見た高度なコーディング手法の多くを知らないことを忘れないでください。

4

2 に答える 2

6

プログラムを実行すると、最初に表示されるエラー メッセージは次のとおりです。

Traceback (most recent call last):
  File "kilomiles.py", line 21, in <module>
    main(ans)
  File "kilomiles.py", line 4, in main
    calculate()
  File "kilomiles.py", line 13, in calculate
    miles=kilometers*0.6214
NameError: global name 'kilometers' is not defined

... これは非常に役に立ちます。kilometersプログラムの 13 行目でcalculate()関数内で使用しようとした変数が定義されていないことがわかります。

これはscopeと呼ばれるものが原因です。関数で定義したkilometers変数は、その関数内にのみ存在しますdata()

だから、あなたは結果を得る必要があります

  1. のうちdata()、および
  2. calculate()

これらの最初の問題を解決するdata()には、値を返すように変更する必要があります。

def data():
    print 'Enter Kilometers Please'
    kilometers = input()
    return kilometers

これで、main()関数で、返される値をキャプチャできます。

    kilometers = data()

次に、 を受け取り、 を返すのと同じ方法で引数としてcalculate()受け取るように変更する必要があります。kilometersmain()ansmiles

def calculate(kilometers):
    miles = kilometers * 0.6214
    return miles

それが完了したら、main()に渡し、そこからキャプチャするように変更できます。kilometerscalculate()miles

    miles = calculate(kilometers)

最後に、words()受け入れmilesて返すように変更しますans

def words(miles):
    print 'The number of miles is', miles
    print 'Enter another number?'
    ans = input()
    return ans

... にもう 1 つ変更を加えてmain()、 に渡し、そこからキャプチャするようにします。mileswords()ans

    ans = words(miles)

したがって、最終的なプログラムは次のようになります。

def main(ans):
    while ans == 'yes':
        kilometers = data()
        miles = calculate(kilometers)
        ans = words(miles)

def data():
    print 'Enter Kilometers Please'
    kilometers = input()
    return kilometers

def calculate(kilometers):
    miles = kilometers * 0.6214
    return miles

def words(miles):
    print 'The number of miles is', miles
    print 'Enter another number?'
    ans = raw_input()
    return ans

ans = 'yes'
main(ans)

プログラムは動作するようになりましたが、習慣になれば戻ってきて苦しむ問題が 1 つありinput()ますraw_input()。それは危険です。可能な限り避けるべきです。ただし、それをどのように修正できるかは、あなたに任せます。

于 2013-02-18T04:56:34.173 に答える
-1

簡単だ。Uがdata()関数で「キロメートル」の値を宣言または取得していて、calculate()からアクセスしようとしています。計算は、data()のローカルスコープであるため、「キロメートル」が何であるかを認識しません。キロメートルを定義して使用する必要があります。

kilometers=0.0

def date():
   global kilometers
   ...
   ...
def calculate():
   global kilometers
   ...
于 2013-02-18T04:41:50.040 に答える