验证Python中的输入

时间:2015-02-25 17:15:08

标签: python python-3.x

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

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!

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

编辑:没关系,正则表达式很好。

3 个答案:

答案 0 :(得分:6)

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

foo.isalpha()

返回TrueFalse

请注意,在Python 3中,这将处理定义为“letters”的所有unicode字符。

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

你可以改变你的行为方式,而不是有一份残疾人名单,最好有一份名单。然后检查字符串的每个字符:

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

使用正则表达式更容易,因为列出所有的valids选项更容易:

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

正则表达式^[a-zA-Z_ ]*$表示仅包含[a-zA-Z_ ]

中的符号的单词

如果你想留下残疾人名单,请使用否定的正则表达式:

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

其中[^0-9@]表示除括号

之间定义的字符外的任何内容