0

みなさん、こんにちは。この質問についてサポートが必要です。

指定されたタイプの入力のみを受け入れることを除いて、Python入力関数と同様に機能するsafe_input(prompt、type)という名前の関数を記述します。

この関数は2つの引数を取ります。

プロンプト:str

タイプ:int、float、str

この関数は、指定されたタイプの正しい入力が入力されるまで、入力のプロンプトを出し続けます。この関数は入力を返します。入力が数値(floatまたはint)として指定された場合、返される値は正しいタイプになります。つまり、関数は変換を実行します。

プロンプトのデフォルトは空の文字列です。タイプのデフォルトは文字列です。

これが私が持っているものです:

safe_input = input(str("Enter a String Type you want to check: "))

test = safe_input("this is a string")
print ('"{}" is a {}'.format(test,type(test)))
test = safe_input("this is a string",int)
print ('"{}" is a {}'.format(test,type(test)))
test = safe_input("this is a string",float)
print ('"{}" is a {}'.format(test,type(test)))                       
test = safe_input(5)
print ('"{}" is a {}'.format(test,type(test)))
test = safe_input(5,int)
print ('"{}" is a {}'.format(test,type(test)))
test = safe_input(5,float)
print ('"{}" is a {}'.format(test,type(test)))
test = safe_input(5.044)
print ('"{}" is a {}'.format(test,type(test)))
test = safe_input(5.044, int)
print ('"{}" is a {}'.format(test,type(test)))
test = safe_input(5.044, float)
print ('"{}" is a {}'.format(test,type(test)))

def safe_input (prompt, type=str):

    if (type == int):
        while (True):
           try:
            # check for integer or float
            integer_check = int(prompt)
            # If integer, numbers will be equal
            if (prompt == integer_check):
                return integer_check
            else:
                print("They are not equal!!")
                return integer_check
        except ValueError:
            print ("Your entry, {}, is not of {}."
                   .format(prompt,type))
            prompt = input("Please enter a variable of the type '{}': "
                           .format(type))

誰かが私がここで間違っていることを知っていますか?私の友人と私はこれに何時間も取り組んできました。

更新:次のようなエラーが発生します:

  File "C:\Users\Thomas\Desktop\ei8069_Lab9_Q4.py", line 28, in <module>
       test = safe_input("this is a string")
  TypeError: 'int' object is not callable

  Traceback (most recent call last):
  File "C:\Users\Thomas\Desktop\ei8069_Lab9_Q4.py", line 28, in <module>
       test = safe_input("this is a string")
  TypeError: 'float' object is not callable
4

2 に答える 2

1

ちょうど私の2セント。

まず、割り当てをより注意深く読んでください。あなたの方法は、彼らが望んでいるものとは正確には異なります。

そして、あなたは多くの不必要な条件を使用しています。次のように、関数ははるかに単純になる可能性があります。

def safe_input(prompt, type_=str):
    if(type_ not in (str, int, float)): 
        raise ValueError("Expected str, int or float.")  

    while True:
        test = input(prompt)    
        try:
            ret = type_(test)
        except ValueError:
            print("Invalid type, enter again.")                
        else:
            break    

    return ret

変数名にtypeなどの組み込み関数を使用しないようにしてください。それらはビルトインをオーバーライドし、後で多くの頭痛を引き起こす可能性があります。

于 2013-02-17T23:01:48.020 に答える
1

なぜあなたはこの行を持っていますか:

safe_input = input(str("Enter a String Type you want to check: "))

プログラムの開始時。代わりに関数の定義が必要ですが、最後に定義があります。

解決策:その偽の行を削除し、関数の定義をプログラムの先頭に移動します。

説明:その行を実行すると、ユーザーに何かを要求します(たとえば、42に割り当てられsafe_inputます。次に、それを関数として使用しようとします42が、整数であり、呼び出すことはできません。

于 2013-02-17T22:44:15.203 に答える