python - Python:如何要求字符串作为输入而不是特定值
问题描述
对于 YourName input() 我想获得一个字符串值。因此,它不应该是浮点数、整数等。在此示例中,我想将“Sunny”替换为任何字符串值,以使 while 循环接受输入。
YourName = ''
while YourName != "Sunny":
print("Please type in your name")
YourName = input()
print(YourName + " is correct")
提前谢谢,最好的
森蒂诺
解决方案
如评论中所述,您可以使用类似于以下内容的内容:
YourName = input("Please enter your name: ")
while True:
if YourName.isalpha():
break
else:
print("Must enter string")
print("Please type in your name")
YourName = input("Please enter your name: ")
continue
isinstance()是一个内置函数,用于检查变量是否属于特定类,例如isinstance(my_var, str) == True
. 但是,该Input()
函数总是返回一个字符串。因此,如果您想确保输入是您想要使用的所有字母.isalpha()。你也可以使用Try/except
. 正如@SiHa 所说,这个 SO 问题得到了很好的回应。
正如评论中所指出的,如果字符串中有空格,这个答案将不起作用。如果您想允许多种名称格式,您可以使用 Regex。例如,您可以执行以下操作:
import re
YourName = input("Please enter your name: ")
while True:
if re.fullmatch(r"[a-zA-Z]+\s?[a-zA-Z]+", YourName) is not None:
break
else:
print("Must enter string")
print("Please type in your name")
YourName = input("Please enter your name: ")
continue
与常规字符串方法相比,使用正则表达式可以让您更好地控制输入。文档,Python 正则表达式 HOWTO。re
是 python 附带的标准库,将为您提供最大的灵活性。您可以使用regex101来帮助您进行测试和调试。
如果re.fullmatch()
找到,将返回一个匹配对象,None
如果没有。它说输入可以是任何小写或大写字母,中间有一个可选的空格,后面跟着更多的字母。
如果您不想导入包,那么您可以遍历输入对象并检查所有字符是否为空格或 alpha 使用:
all([x.isalpha() | x.isspace() for x in YourName])
但是,这不会说明有多少空间或它们在哪里。如果您想要更多控制权,最好使用正则表达式。
推荐阅读
- r-markdown - Rhtml 中的 TOC 故障
- jquery - 无法在所有浏览器和设备上更改“woocommerce_checkout_fields”上的年份
- javascript - 为什么我不能通过循环将多个值插入 Firebase?
- windows - 当没有为边框和标题栏打开强调色时,注册表中的位置是 Windows 标题栏颜色(Win 10)
- unity3d - 游戏对象在脚本中没有 Destroy() 的情况下自行删除
- discord - Discord.js v13 尝试创建标签系统
- python - python区间算术库
- apache-kafka - 使用 Spring 的 KafkaListener 优于 Apache 的 KafkaConsumer 的优势?
- python - 过滤并仅保留具有相同索引的行
- flutter - Flutter Linkfiy - 不包含链接文本的方法?