我真的很担心如何执行以下操作:
您的主程序应该从用户读取两个字符串(一次一个字符串,因此您将有两个单独的字符串)。读取的第一行(字符串)称为文本字符串,第二行(字符串)称为模式字符串。
然后,您将实现一个名为 match 的函数,该函数实现简单的强力模式匹配。此函数接受两个字符串(文本字符串和模式字符串),如果模式字符串匹配文本字符串的某些部分,则返回
True
:否则,函数返回False
。您的主程序必须继续执行以下任务:向用户询问文本字符串和模式字符串,并打印一条消息,指出是否在文本中找到了该模式。当用户输入 qqq 作为文本字符串时,程序将停止(无论字母如何,您的程序都必须停止)。
到目前为止,我输入的代码都没有。请帮帮我!
答案 0 :(得分:0)
所以我想我已经写了一个非常有用的程序,可以帮助你。正如@Scovetta所提到的,我们可以使用Python的in
运算符。但是,如果你坚持使用暴力方法而不使用Python的优秀语法糖,那么你绝对可以做到这一点。
这是我写的一个示例程序。如果这有帮助,请告诉我!随意提出您可能遇到的任何问题。
# This program is just going to find if a string contains a substring
def match(text, pattern):
'''
Simple match program
'''
if pattern in text:
return True
else:
return False
test_cases = [['ab', 'bab'], ['cat', 'catdog'], ['banana', 'apple'], ['tree', 'tree']]
def brute_match(text,pattern):
'''
We just want to check that our text has our pattern
So let's just iterate over our text
'''
length_of_pattern = len(pattern)
for i in range(len(text)):
# Abuse python's splicing because we don't have to worry about end of the string nonsense
if text[i:length_of_pattern+i] == pattern:
return True
return False
for case in test_cases:
ans = match(case[1], case[0])
bans = brute_match(case[1], case[0])
print("{} is in {} (T/F): {}".format(case[0], case[1], ans))
print("{} is in {} (T/F): {}".format(case[0], case[1], bans))
# Enter your main program
# We want to loop infinitely unless we get qqq
while True:
text_string = raw_input("Please enter your text string: ")
if text_string == 'qqq':
break
pattern_string = raw_input("Please enter your pattern string: ")
print("Using 'in' operator:")
print('-'*20)
if match(text_string):
print("IS a valid match")
else:
print("NOT a valid match")
print("Using brute force:")
print('-'*20)
if brute_match(text_string):
print("IS a valid match")
else:
print("NOT a valid match")
我意识到代码有点混乱,但我只是想快速写出你的代码!
如果您有任何问题,请与我们联系。