我刚开始学习我的第一个真正的编程语言Python。我想知道如何限制raw_input
中的用户输入仅包含某些字符和长度限制。例如,如果用户输入的字符串除了字母a-z
以外还包含其他内容,我想显示一个错误消息;如果用户输入的字符超过15个字符,我想显示另一个错误消息。
第一个问题似乎可以用正则表达式解决,因为我在JavaScript中使用过它们,但我不确定如何在Python中使用它们。第二个问题,我不知道该如何处理。有谁能帮忙吗?
我刚开始学习我的第一个真正的编程语言Python。我想知道如何限制raw_input
中的用户输入仅包含某些字符和长度限制。例如,如果用户输入的字符串除了字母a-z
以外还包含其他内容,我想显示一个错误消息;如果用户输入的字符超过15个字符,我想显示另一个错误消息。
第一个问题似乎可以用正则表达式解决,因为我在JavaScript中使用过它们,但我不确定如何在Python中使用它们。第二个问题,我不知道该如何处理。有谁能帮忙吗?
问题1:限制特定字符
你说得没错,这很容易用正则表达式解决:
import re
input_str = raw_input("Please provide some info: ")
if not re.match("^[a-z]*$", input_str):
print "Error! Only letters a-z allowed!"
sys.exit()
问题2:限制字符串长度
正如Tim正确提到的那样,你可以通过修改第一个示例中的正则表达式以仅允许一定数量的字符来实现此目的。你也可以像这样手动检查字符串的长度:
input_str = raw_input("Please provide some info: ")
if len(input_str) > 15:
print "Error! Only 15 characters allowed!"
sys.exit()
或者将两者合并:
import re
input_str = raw_input("Please provide some info: ")
if not re.match("^[a-z]*$", input_str):
print "Error! Only letters a-z allowed!"
sys.exit()
elif len(input_str) > 15:
print "Error! Only 15 characters allowed!"
sys.exit()
print "Your input was:", input_str
正则表达式还可以限制字符的数量。
r = re.compile("^[a-z]{1,15}$")
提供一个正则表达式,只匹配由1至15个全小写ASCII字母组成的输入。
assert
。def custom_input(inp_str: str):
try:
assert len(inp_str) <= 15, print("More than 15 characters present")
assert all("a" <= i <= "z" for i in inp_str), print(
'Characters other than "a"-"z" are found'
)
return inp_str
except Exception as e:
pass
custom_input('abcd')
#abcd
custom_input('abc d')
#Characters other than "a"-"z" are found
custom_input('abcdefghijklmnopqrst')
#More than 15 characters present
你可以编写一个input
函数的包装器。
def input_wrapper(input_func):
def wrapper(*args, **kwargs):
inp = input_func(*args, **kwargs)
if len(inp) > 15:
raise ValueError("Input length longer than 15")
elif not inp.isalpha():
raise ValueError("Non-alphabets found")
return inp
return wrapper
custom_input = input_wrapper(input)
if any( [ i>'z' or i<'a' for i in raw_input]):
print "Error: Contains illegal characters"
elif len(raw_input)>15:
print "Very long string"
def enter_sentence():
condition = False
while not condition:
sentence = input('Enter a sentence please: ').lower()
lower_check_list = list(string.ascii_lowercase + ' ')
for letter in sentence:
if letter not in lower_check_list:
print('Enter only a letter characters.Try again')
break
else:
if len(sentence) > 15:
print('The maximum number of characters is 14. Try again')
else:
condition = True
return 'Your sentence has been verified and complies'
print(enter_sentence())