python - 如何在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"
并重复问题?
解决方案
我正在更新我的答案以简化代码并使其更具可读性。
下面的函数是我将在自己的代码中使用的函数,我认为它比我的旧答案更“合适”。
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()
函数返回 。True
True
执行后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”。
推荐阅读
- dependency-injection - 某些服务无法使用库构建:NetCore.AutoRegisterDi
- javascript - Javascript:无法添加延迟和加载功能
- shell - 在ansible中执行curl命令
- python-3.x - 安装了 flask_sqlalchemy 模块,但仍然出现相同的错误 ModuleNotFoundError: No module named 'flask_sqlalchemy'
- php - 我如何使用 foreach 循环从 api 中获取 imdb_id
- node.js - response.body 返回 null 并且 response.data 在我的 react+express 应用程序中返回 undefined
- git - 如何将 Terraform 与 GIT 集成到 AWS 服务中,例如用于版本控制的 lambda
- php - 为什么 Laravel 分页显示同一页面?
- visual-studio-code - 如何以编程方式使 TreeView 可见
- java - HSQLDBs 'ON DUPLICATE KEY UPDATE'-功能不像 MYSQL 那样表现?