在Python中验证输入

2024-10-03 02:38:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段要求输入的代码。输入不得包含任何数字:

def main():

    invalid = []
    foo = ""


    foo = str(input("Enter a word: ") )

    invalid = ["1","2","3","4","5","6","7","8","9","0"]

    for eachInvalid in invalid:
        if eachInvalid in foo:
            print("Not a real word!")
            main()
        else:
            pass


main()

到目前为止,它的工作,但我并不自豪。最好的办法是什么?例如,一个单词不包含像~@:这样的内容,所以我必须将它们添加到该列表中。如何避免这种情况,同时保持代码的干净性和可读性?你知道吗

另外,还有一个错误,如果我运行代码并键入像hello这样的内容,这是有效的,但是如果我键入了无效的内容,它会把我带回到开头,但是当我键入一个有效的词时,它仍然表示无效?例如:

Enter a word: hello
>>> ================================ RESTART ================================
>>> 
Enter a word: 123
Not a real word!
Enter a word: hello
Not a real word!

如何修复此错误?在输入中查找无效字符的最佳方法是什么?你知道吗

编辑:无需担心,正则表达式很好。


Tags: 代码in内容hello键入foomain错误
3条回答

您可以使用更简单的方法来测试整个字符串中的一个数字,而不是单独测试每个字母。你知道吗

if any(x.isdigit() for x in foo):
        print("Invalid Word")
    else:
        print("valid word")

虽然更复杂的验证是正则表达式的合适用例,但在这个简单的例子中,有一个内置函数isalpha(),它检查字符串是否只包含字母字符。你知道吗

foo.isalpha()

返回TrueFalse。你知道吗

请注意,在Python3中,这将处理定义为“字母”的所有unicode字符。你知道吗

你可以反过来做,而不是有一个名单的伤残者,它是更好的有一个名单的有效。然后检查字符串的每个字符:

valids = ['a', 'b', 'c', 'd']
for letter in foo:
    if (not letter in valids):
            print("Not a real word!")

使用regex更容易,因为列出所有valids选项更容易:

import re
if (not re.match("^[a-zA-Z_ ]*$", foo)):
            print("Not a real word!")

regex ^[a-zA-Z_ ]*$表示只在[a-zA-Z_ ]中包含符号的单词

如果要保留无效列表,请使用否定正则表达式:

if (re.match("[^0-9@]", foo)):
            print("Not a real word!")

其中[^0-9@]表示除括号之间定义的字符以外的任何字符

相关问题 更多 >