2016-10-10 11 views
-2

私は、大学の課題のための風寒い指数のコードを書いています。 Profでは、Try/Exceptブロックを使用せずに、ユーザーが空白や文字を入力したときにコードがクラッシュするのを防ぐ必要があります。 (彼は文字列メソッドのみを参照します)。Try/Exceptの代わりにStringを使用するとクラッシュを防ぐことができます.-方法?

クラッシュする代わりに、エラーメッセージなどを入れてください。 ( "無効な入力、数字のみ")

string.isdigitとstring.isnumericを使用しようとしましたが、負の度数を整数として受け付けません。

提案がありますか? (下のコード) 別の「if」ステートメントは機能しますか?

This is the code so far.

+0

はたぶん '.isdigit' ...' userstr.replace前に ' - 'を削除( ' - '、 '')isdigit()' – beroe

+0

あなたは本当にそれが解決されたらそれをマークしたような質問を編集し、新しい質問をするべきではありません。編集して何が尋ねられているのかを変更すると、サイトが壊れてしまいます。さらに、人々はあなたの宿題を「ライブブログ」するのが好きではなく、投票に落ちる傾向があります。 – beroe

+0

@beroeは言った。あなたの質問を明確にし、詳細を追加するには、編集機能を使用する必要があります。別の質問をするために乱用しないでください。私は今編集をロールバックしました。 – Kos

答えて

0

句読点を置き換えます。

if temperature.replace('-','').replace('.','').isnumeric(): 
+0

誰かが私の投稿に投票したので、私は別の質問をすることができませんでした...あなたはそれに答えることができると思いますか? –

0

無限ループを使用し、すべてが右のようであることを確認してください。 エラーが発生した場合は常に、continueステートメントを使用します。すべてのチェックと変換が完了したら、break文を使用します。

import re 
import sys 
while True: 
    print("Temperature") 
    s = sys.stdin.readline().rstrip('\n') 
    if re.match("^-?[0-9]+(\\.[0-9]+)?$", s) is None: 
     print("Doesn't look like a number") 
     continue 
    if '.' in s: 
     print("Number will be truncated to integer.") 
    temp = int(float(s)) 
    if not (-50 <= temp <= 5): 
     print("Out of range") 
     continue 
    break 
+0

私の質問は、Try/Except Blocksを使わずにスピーディーな応答をありがとうございます。 –

+0

それは速すぎると思います。 string.isnumeric()の代わりに正規表現を使用できます。 "^ - ?[0-9] +(\\。[0-9] +)?$"はトリックを行う必要があります。小数点も許可します。 –

+0

もう少し具体的に質問を更新しました。それは、エラーメッセージを表示する代わりに、非数字を受け入れる必要があります。別の「if」ステートメントを正しく利用する必要がありますか? –

関連する問題