You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用自定义函数重构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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:25:29