get_int 関数にアプローチする方法は次のとおりです。
def get_int(prompt, minval, maxval):
'''Prompt for integer value between minval and maxval, inclusive.
Repeat until user provides a valid integer in range.
'''
while 1:
n = int(input(prompt))
if (n < minval):
print("value too small")
print("value must be at least {0}".format(minval))
elif (n > maxval):
print("value too large")
print("value must be not more than {0}".format(maxval))
else:
print("value accepted")
return n
pass
# TODO: raise a ValueError or a RuntimeError exception
# if user does not provide valid input within a preset number tries
if __name__ == "__main__":
# Example: test the get_int function
# Requires user interaction.
# Expect out-of-range values 0, 101, -5, etc. should be rejected.
# Expect range limit values 1 and 100 shoudl be accepted.
# Expect in-range values like 50 or 75 should be accepted.
minval = 1
maxval = 100
test1 = get_int("Choose a number between {0} and {1}: ".format(
minval,maxval), minval, maxval)
print("get_int returned {0}".format(test1))
function 内get_intではprompt、 、minval、およびmaxval引数は、引数リストにあるため、既に定義されています。引数が関数にprompt渡され、無限 while ループ内の範囲チェックに制限が使用されます。この関数は、範囲内の有効な数値を返します。ユーザーが範囲外の整数を入力した場合は、許容できる入力が得られるまで再度尋ねます。したがって、呼び出し元は、指定された範囲内の整数を取得することが保証されます。input()minvalmaxval
これは理想的な設計ではありません。ユーザーが数字を入力したくないが、「戻る」ことを望んでいる場合はどうなるでしょうか...そのため、このアプローチの範囲外です。しかし、例外処理と呼ばれるより高度なプログラミング手法があります (例についてはtry/ catch/を参照してください) 7.4. try ステートメント。throw
get_intが呼び出される関数の外側では、minvalとmaxvalがメイン モジュールの名前空間でグローバル変数として定義されます。テストのために、対話モードで実行し、単一の値を受け入れました。Python 2.7 および Python 3.2 でテスト済み。
文字列の書式設定式を見たことがない場合"xxxxx {0} xxxx".format(value)は、python ヘルプ ファイルのセクション6.1.2 で説明されています。文字列のフォーマットと6.1.3.2. フォーマットの例。