首页 > 解决方案 > 如何在python中制作一个正确的名称输入程序

问题描述

我在询问用户姓名的部分。到目前为止,我得到了这个:

# Import stuff
import time

# Create empty variable
Name = ""

# Ask their name
while Name = ""
    Name = input("What is your name? ")
    print("")
print(Name)
print("")
time.sleep(3)

因此,如果用户什么都不输入,它会重复这个问题。但是当用户输入整数或浮点数时,它会将其注册为有效名称。

我将如何做到这一点,以便如果Name变量是整数或浮点数,它将响应"Please enter a valid name"并重复问题?

标签: python

解决方案


我正在更新我的答案以简化代码并使其更具可读性。

下面的函数是我将在自己的代码中使用的函数,我认为它比我的旧答案更“合适”。

from string import ascii_letters

def get_name():
    name = input("What is your name?\n: ").strip().title()

    while not all(letter in ascii_letters + " -" for letter in name):
        name = input("Please enter a valid name.\n: ").strip().title()

    return name

为了打破这一点,该行的all(letter in ascii_letters + " -" for letter in name)意思是“如果名称中的每个字母都不是字母字符、空格或连字符”。

该部分letter in ascii_letters + " -"检查字符串中是否有字母"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ -"

下一部分 ,for letter in name对字符串中的每个字符重复此操作。这将有效地返回一个布尔值列表,[True, True, True, ...]其中 anyFalse是未通过条件的字符。接下来,将此列表传递给函数,如果所有列表项都是,则该all()函数返回 。TrueTrue

执行后all(),条件反转,允许循环在存在单个失败字符时继续。


旧答案如下,它仍然有用。

这个功能应该很适合你。只需检查用户输入的字符串是否仅为字母字符,否则再次询问。

注意使用str.isalpha().

def get_name():
    name = input("What is your name?\n: ").strip().title()

    while not (name.replace("-", "") and
               name.replace("-", "").replace(" ", "").isalpha()):
        name = input("Please enter a valid name.\n: ").strip().title()

    return name

检查if name将检查字符串是否为空,并且使用str.strip()返回的值将删除用户输入左侧或右侧的任何周围空白(杂散空格)。

str.replace("-", "")检查有效性时消除连字符。感谢您指出这一点@AGN Gazer

现在您可以稍后在脚本中调用该函数,或将其存储以备后用。

name = get_name().title()

print("You said your name was " + name + ".)

str.title()字符串中每个单词的字母转换为大写。例如,如果我输入我的名字“jacob birkett”,则输出(以及后续值name将是“Jacob Birkett”。

查看 、str.isalpha()str.strip()str.replace()文档str.title()


推荐阅读