是否可以将这些功能组合在一起以创建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!")
提前致谢!
答案 0 :(得分:3)
您可以重构代码以创建一个处理两种情况的函数,方法是识别相同的部分,并参数化其他部分。
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
可能提出ValueError
是一个不同的问题。
答案 1 :(得分: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)
希望能为您提供有关如何减少类似功能重复的一些想法。
答案 2 :(得分: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
,否则你的其余代码是多余的。
答案 3 :(得分:1)
是!
def check_input_and_age():
return checkinput(), checkage()