0

私はこのコードに本当に混乱しました:

print("Welcome to Healthometer, powered by Python...")
miles = input("How many miles can you walk?: ")
if float(miles) <= 0:
    print("Who do you think you are?!! Go and walk 1000 miles now!")
elif float(miles) >= 10:
    print("You are very healthy! Keep it up!")
elif float(miles) > 0 and miles < 10:
    print("Good. Try doing 10 miles")
else:
    print("Please type in a number!")
    miles = float(input("How many miles can you walk?: "))
    if miles <= 0:
        print("Who do you think you are?!! Go and walk 1000 miles now!")
    elif miles >= 10:
        print("You are very healthy! Keep it up!")
    elif miles > 0 and miles < 10:
        print("Good. Try doing 10 miles")

ただし、エラーを見てください: http://i.stack.imgur.com/PYT80.png

誰かが私に Python で try/except を試すように言いましたが、ドキュメントを見た後、何をすべきか、コード内の他のすべての if と elif でそれを実装する方法がわかりません。私はこれをやってみました:

print("Welcome to Healthometer, powered by Python...")
try:
    miles = float(input("How many miles can you walk? "))
except ValueError:
    print("That is not a valid number of miles")

if float(miles) <= 0:
    print("Who do you think you are?!! Go and walk 1000 miles now!")
elif float(miles) >= 10:
    print("You are very healthy! Keep it up!")
elif float(miles) > 0 and miles < 10:
    print("Good. Try doing 10 miles")
else:
    print("Please type in a number!")
    miles = float(input("How many miles can you walk?: "))
    if miles <= 0:
        print("Who do you think you are?!! Go and walk 1000 miles now!")
    elif miles >= 10:
        print("You are very healthy! Keep it up!")
    elif miles > 0 and miles < 10:
        print("Good. Try doing 10 miles")

しかし、それは与えました: 行 7, in if float(miles) <= 0: NameError: name 'miles' is not defined

私はPython 3.3.2を使用しています

4

3 に答える 3

2

あなたの別の質問にも答えましたが、ここでも答えたほうがいいと思いました。

while True:
    try:
        miles = float(input("How many miles can you walk?: "))
        break
    except:
        print("Please type in a number!")

#All of the ifs and stuff
#Make sure not to put these in the loop, they go AFTER!!

コードはとてもシンプルです:

  • 入力を float に変換しようとし続け、失敗した場合は最初に戻ります。
  • 最終的に成功すると、ループから抜け出し、下に置いたコードに移動します。

編集:

さらに説明すると、エラーNameError: name 'miles' is not definedが発生した理由は、が失敗し、入力としてTry/Except定義されないためです。miles代わりに、「入力してください...」と出力し、ifとにかく s に進みます。

そのため、ループが必要です。これにより、コードは成功するまで定義を試行しmiles続け、成功した場合にのみループから抜け出し、ロジックに進みます。

于 2013-11-01T23:29:34.513 に答える
1

おそらく、例外ブロックに陥っているため、miles変数が宣言されておらず、コードの残りの部分でその変数が必要になっている可能性があります。を追加するraiseと、入力に問題が発生した場合にコードの残りの部分が実行されないように、コードが強制的に終了します。

try:
    miles = float(input("How many miles can you walk? "))
except Exception, e:
    print("That is not a valid number of miles")
    raise e

編集:

私はあなたが今何をしようとしているのか分かります。これにより、コードが意図したとおりに機能します。あなたがこの問題に取り組んでいる方法は、あまり良くありません。ユーザー入力の処理方法について詳しく読む必要があります。

miles = None
try:
    miles = float(input("How many miles can you walk? "))
except ValueError:
    print("That is not a valid number of miles")
于 2013-11-01T23:21:08.437 に答える
0

入力が無効な場合、except ステートメントが実行されますが、スクリプトはそれを超えて続行します。いくつかのオプションがあります。sys.exit() を使用してアプリケーションを終了するように python に指示するか、ユーザーに再試行するように指示したり、ハードコードされた値をデフォルトにするなど、他の動作を実装することができます。

次のように exit を使用します。

import sys

try:
    miles = float(input("How many miles can you walk? "))
except Exception, e:
    print("That is not a valid number of miles")
    sys.exit()

または、ユーザーに再試行するように依頼できます。

miles = None
def ask():
    global miles
    try:
        miles = float(input("How many miles can you walk? "))
    except: 
        print("Invalid input, try again")
        ask()

ask()
# remaining code here
于 2013-11-01T23:21:28.547 に答える