5

こんにちは、特定の範囲内の入力を除いて、ユーザーから数値を取得したいと思います。

以下は機能しているように見えますが、私は初心者であり、機能している間は間違いなくもっとエレガントな例があると思いました...悪い習慣に陥らないようにしようとしています!

私が気づいたことの 1 つは、プログラムを実行すると、CTL+C がループから抜け出さず、代わりに例外が発生することです。

while True:
  try:
    input = int(raw_input('Pick a number in range 1-10 >>> '))
    # Check if input is in range
    if input in range(1,10):
      break
    else:
      print 'Out of range. Try again'
  except:
    print ("That's not a number")

すべてのヘルプは大歓迎です。

4

2 に答える 2

7

Ctrl+C は を発生させKeyboardInterruptExceptiontry … exceptブロックはこれをキャッチします:

while True:
   try:
       input = int(raw_input('Pick a number in range 1-10 >>> '))
   except ValueError: # just catch the exceptions you know!
       print 'That\'s not a number!'
   else:
       if 1 <= input < 10: # this is faster
           break
       else:
           print 'Out of range. Try again'

一般に、発生すると予想される例外をキャッチする必要があります (そのため、Ctrl+C の問題のような副作用は発生しません)。try … exceptまた、ブロックはできるだけ短くする必要があります。

于 2012-07-21T18:03:24.650 に答える
1

コードには改善できる項目がいくつかあります。

(1) 最も重要なことは、単に一般的な例外をキャッチするのは得策ではありません。探している特定tryの例外をキャッチする必要があり、通常はブロックをできる限り短くする必要があります。

(2) また、

  if input in range(1,10):

のようにコーディングしたほうがよいでしょう。

  if 1 <= input < 10:

現在、 function range()は 1 から9までの値のリストを繰り返し作成しますが、これはおそらくあなたが望むものでも必要なものでもありません。また、値10を含めますか? あなたのプロンプトはそれを暗示しているように見えるので、生成されたリストには上限値が含まれないため、 への呼び出しを調整する必要があります。-ステートメントは次のように変更する必要がありますrange(1, 11)ifif 1 <= input <= 10:

于 2012-07-21T18:02:59.117 に答える