-2

私のコードでは、ユーザーに 3 つの数字を要求する必要があります。数字が上100または下の場合は1、それらに伝えてください"no way, try a different number" 。私の問題は次のとおりです。変数を定義する方法がわかりません。コードを実行するとprompt、以下の結果が得られます。stacktrace

コード:

def get_int(prompt, minval, maxval):
    """gets a value for an input. if its too small or large gives error"""
    n= int(input("Choose a number between 1 and 100: "))
    maxval= n > 100
    minval= n< 1
    prompt = n

    int_choice.append(n)
    return None


int_choice=[]# list for adding inputs

for i in range (3):
    get_int(prompt, minval, maxval)

    if n== minval or n== maxval:
        print("no way, try a diffrent number")
    int_choice.append(n)
    print("you chose: ", int_choice) 

スタックトレース:

>line 18, in <module>  
get_int(prompt, minval, maxval)  
NameError: name 'prompt' is not defined
 is the error message
4

1 に答える 1

0

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が呼び出される関数の外側では、minvalmaxvalがメイン モジュールの名前空間でグローバル変数として定義されます。テストのために、対話モードで実行し、単一の値を受け入れました。Python 2.7 および Python 3.2 でテスト済み。

文字列の書式設定式を見たことがない場合"xxxxx {0} xxxx".format(value)は、python ヘルプ ファイルのセクション6.1.2 で説明されています。文字列のフォーマット6.1.3.2. フォーマットの例

于 2015-10-26T01:41:04.073 に答える