-9

これらの機能を組み合わせて 1 つの機能を作成することはできますか?

def checkinput():
    while True:
        try:
            name=input("whats your name?")
            return name
        except ValueError:
            print("error!")

と組み合わせ:

def checkage():
       while True:
           try:
               age=input("whats your age?")
               return age
           except ValueError:
               print("error!")

前もって感謝します!

4

4 に答える 4

4

コードをリファクタリングして、同じ部分を認識し、他の部分をパラメーター化することで、両方のケースを処理する 1 つの関数を作成できます。

def check_value(prompt):
    while True:
        try:
            val=input(prompt)
            return val
        except ValueError:
            print("error!")

2 つの関数の唯一の違い (変数名などの些細な違いを除く) は、input関数によって表示されるプロンプトです。これを新しい統合関数のパラメーターにして、次のように呼び出します。

x = check_input("What's your name?")
y = check_input("What's your age?")

なぜinputa をレイズする可能性があると期待するのかValueErrorは別の問題です。

于 2013-10-17T18:18:15.230 に答える
3

コードを一般化する場合は、任意の数の質問を行うことができる1 つの関数を作成できます。

次のような関数を作成できます。

def ask_a_question(prompt):
   while True:
       try:
           answer = input(prompt)
       except ValueError:
           print("Error!")
       else:
           return answer

たとえば、main()関数にプロンプ​​トのリストを含めることができます。

prompts = {
    'name': 'What is your name?',
    'age': 'How old are you?',
    'dog': 'Do you love dogs more than cats? (yes, you do)',
}

最後に、すべての質問を 1 つずつ尋ねるループを作成します。

answers = {}  # a dictionary of answers

for key, prompt in prompts.items():
    answers[key] = ask_a_question(prompt)

同様の機能の重複を減らす方法について、いくつかのアイデアが得られることを願っています。

于 2013-10-17T18:24:00.157 に答える
2

関数を他の関数から簡単に呼び出すことができます。

def check_user_data():
    checkinput()
    checkage()

しかし、実際には、これはばかげたことです。名前と年齢だけが必要な場合は、次のようにした方がよいでしょう。

 def get_user_info():
     name = input("What is your name? ")
     age = input("What is your age? ")
     return name, age

ValueError入力を取得しているだけではを取得することはありません。実行していれば をint(input('What is your age? '))取得できますがValueError、それ以外の場合はコードの残りの部分が不要になります。

于 2013-10-17T18:14:50.833 に答える
1

はい!

def check_input_and_age():
    return checkinput(), checkage()
于 2013-10-17T18:14:59.223 に答える