如何用自定义函数重构Python重复的while输入验证逻辑?
Python 姓名输入验证的函数重构方案
在网站开发场景中,需要对用户输入的名、姓做验证:要求输入长度小于15且仅包含字母。最初用重复的while循环实现了功能,但代码冗余,尝试自定义函数重构却没能正确实现验证逻辑。
原有可用的重复循环代码
first_name = "First Name:\t" while first_name: first_name = input("First Name:\t") if len(first_name) < 15 and first_name.isalpha(): break else: print("Invalid entry. Please try again") continue second_name = "Second Name:\t" while second_name: second_name = input("Second Name:\t") if len(second_name) < 15 and second_name.isalpha(): break else: print("Invalid entry. Please try again") continue
失效函数的问题分析
你写的失效函数存在两个核心问题:
- 仅在函数外部获取一次输入,循环内没有重新获取用户的新输入,导致首次输入无效时会无限循环打印"invalid"
- 函数没有返回验证通过的姓名,无法将结果赋值给变量供后续使用
失效函数代码:
def name(first): while True: if len(first) < 15 and first.isalpha(): break else: print('invalid') continue first = input("First Name:\t")
正确的自定义函数实现
我们需要让函数内部处理输入循环,并且返回验证通过的结果,同时将输入提示作为参数传入,提升函数复用性:
def validate_name(prompt): while True: user_input = input(prompt) # 验证长度<15且仅含字母 if len(user_input) < 15 and user_input.isalpha(): return user_input else: print("Invalid entry. Please try again")
函数调用示例
调用该函数即可替代原有重复逻辑,分别获取验证后的名和姓:
first_name = validate_name("First Name:\t") second_name = validate_name("Second Name:\t") # 验证通过后可直接使用结果 print(f"Hello, {first_name} {second_name}!")
补充说明
- 函数通过
prompt参数接收输入提示,后续如果需要验证中间名等类似字段,直接传入对应提示即可复用 - 若需要支持带连字符、空格的姓名(如"Mary-Ann"),可将
isalpha()替换为正则验证,比如re.match(r'^[A-Za-z -]+$', user_input),当前需求下isalpha()完全适用
内容的提问来源于stack exchange,提问作者useruser44
相关产品推荐
相关产品推荐

