1

私のラボでは、「数値の入力を求め、正または負の数値を受け入れます。二重の代替「決定」構造を使用して、入力された数値が正か負かを示すメッセージを出力します。」と尋ねます。

私は自分のコードを実行しましたが、何らかの理由で機能しませんでした。

def getNumFromUser():
  num=input (“Please enter a number: “)
  if num >= 0:
      print "The number you entered  is positive"
  elif num  <= 0:
      print "The number you entered is negative"
  else:
     getNumFromUser() 

そして、何らかの理由でコードが実行されません。elifステートメントを取り出すと、数値を入力するように求められます。負の数を入力すると、正の数を取得するために数値を再入力するように求められます...わかりません。コードで負の数と正の数を組み合わせて、「入力された数が正か負かを示すメッセージを出力する」方法。*私はPythonプログラミングに慣れていないので、ここで迷子になっています。誰かが私に説明してくれれば幸いです*

4

3 に答える 3

4

inputpython2.xの関数は、コードとして渡した文字列を評価しようとします。これは望ましくないか危険であると見なされる可能性があり、通常はraw_input代わりに使用することをお勧めします。

そうは言っraw_inputても、文字列が返されます。他のintと比較するために、それをintに変換する必要があります。

val_str = raw_input("enter a number")
if int(val_str) >= 0:
    print "greater"

ユーザーが数値を入力しないと、その例がクラッシュすることに注意してください。文字列が数字であることを確認するには、次を使用します val_str.isdigit()。これは、floatではなくintに対して機能します。チェックの一部は、最初にそれがintであることを確認することです。そうでない場合は、もう一度質問してください。また、isdigit負の数を適切に検出しません。つまり、発生する可能性のある例外をキャッチする方法を学びたいと思うかもしれません...

全体的な構造については、悪い情報を入力するたびに再帰的に呼び出すよりも、単純なwhileループチェックの方が役立つと思います。getNumFromUser

def getNumFromUser():

    while True:
        num=raw_input("Please enter a number: ")
        try:
            num = int(num)
        except ValueError:
            # if the input cannot be converted into an int
            # then loop again
            continue
        else:
            # otherwise, we have an int, so stop looping
            break

    # num is now an int
    if num >= 0:
        print "The number you entered  is positive"
    else:
        print "The number you entered is negative"

    return num

ユーザーが有効な以外のものを入力することを期待することは割り当ての一部ではないかもしれませんがint、この例は、intに変換して失敗を処理する方法を示しています。

于 2012-09-04T19:59:02.393 に答える
0

使用する

num=raw_input(“Please enter a number: “)

代わりは

于 2012-09-04T19:56:07.967 に答える
0

入力と括弧の間にスペースがないことを確認してください。あなたはこれを書いた:num = input( "数字を入力してください:")これを書くべきだったとき:num = input( "数字を入力してください:")これは文字列を評価します。少なくともPythonを使ったプログラミングの経験では、生の部分を追加する必要はありません。

于 2013-11-20T14:24:57.447 に答える