-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

您可以重构代码以创建一个处理这两种情况的函数,方法是识别相同的部分并参数化其他部分。

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

这两个函数之间的唯一区别(除了变量名称等微不足道的区别)是input函数显示的提示。我们将它作为新统一函数的参数,并像这样调用它:

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

为什么你期望input可能提出 aValueError是一个不同的问题。

于 2013-10-17T18:18:15.230 回答
3

如果您想概括您的代码,您可以编写一个可以提出任意数量问题的函数。

您可以创建如下所示的函数:

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)',
}

最后,您将创建一个循环,逐一询问您的所有问题:

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当你只是接受输入时,你永远不会得到 a - 如果你这样做int(input('What is your age? ')),你可以获得 a ValueError,但否则你的其余代码是多余的。

于 2013-10-17T18:14:50.833 回答
1

是的!

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