我有一段代码要求输入。输入不得包含任何数字:
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!
如何修复此错误以及在输入中查找无效字符的最佳方法是什么?
编辑:没关系,正则表达式很好。
答案 0 :(得分:6)
虽然更复杂的验证是正则表达式的合适用例,但在这个简单的情况下,有一个内置函数isalpha()
,它检查字符串是否只包含字母字符。
foo.isalpha()
返回True
或False
。
请注意,在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@]
表示除括号