首页 > 解决方案 > Python:如何要求字符串作为输入而不是特定值

问题描述

对于 YourName input() 我想获得一个字符串值。因此,它不应该是浮点数、整数等。在此示例中,我想将“Sunny”替换为任何字符串值,以使 while 循环接受输入。

YourName = ''

while YourName != "Sunny":
    print("Please type in your name")
    YourName = input()

print(YourName + " is correct")

提前谢谢,最好的

森蒂诺

标签: pythonstringloopswhile-loop

解决方案


如评论中所述,您可以使用类似于以下内容的内容:

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 正则表达式 HOWTOre是 python 附带的标准库,将为您提供最大的灵活性。您可以使用regex101来帮助您进行测试和调试。

如果re.fullmatch()找到,将返回一个匹配对象,None如果没有。它说输入可以是任何小写或大写字母,中间有一个可选的空格,后面跟着更多的字母。


如果您不想导入包,那么您可以遍历输入对象并检查所有字符是否为空格或 alpha 使用:

all([x.isalpha() | x.isspace() for x in YourName])

但是,这不会说明有多少空间或它们在哪里。如果您想要更多控制权,最好使用正则表达式。


推荐阅读