2016-06-15 25 views
-1

私は2つだけ小数点チェック入力の10進数

2 - コードがある場合は最初、私は誰もがそれを修正する方法を知っています負の数

を導入した場合の数を返しませんチェックする方法がわかりませんか?数が負のときに関数が自分自身を再帰的に呼び出しますが、isValidの値がその呼び出しの後に常にfalseですので、ので、あなたのコードが負の数で動作しない理由がある

どうもありがとう

+0

これは、あなたのようなソリューションを与えるだろう。 – nbryans

+1

カンマを小数点に置き換える理由がわかりません。 – holdenweb

+0

ダングそれで、なぜ多くの人がwhileループ**と再帰**を使って入力を得るのですか?関数内で 'getnumber()'の呼び出しを取り除き、#2を解決します。 –

答えて

1

ループ反復。

実際にブール変数は必要ありません。

これで、小数点以下2桁の検出が問題になります。文字列レベルでそれを実行できるようにするには、浮動小数点数に変換した文字列を保持する必要があります。 sとして保存すると、len(s) > 3やs [-3] == '。'などのテストを使って検証することができます。あなたはいつも `単一.`と2文字がピリオドの後に存在しているかどうかを確認するために、文字列をチェックすることができ

def getnumber(): 
    while True: 
     try: 
      s = raw_input("Write a number:").replace(",",".") 
      number = float(s) 
      if number >= 0 and len(s) > 3 and s[-3] ==".": 
       return number 
      else: 
       print("Negative or not two decimal places") 
     except Exception: 
      print("Invalid number") 

print(getnumber()) 
+0

もちろん、負の数と間違った場所の数について異なるエラーメッセージが必要な場合は、テストを分割することができます。 – holdenweb

+0

どうもありがとうございました。それは完全に動作します:) – Jessica

+0

なぜ 'try ... except'を使うのですか?これは無効な番号の検出に何ももたらさず、代わりに明示的に処理されるべき他の例外を隠す可能性があります。 – zezollo

関連する問題