NameError: name is not defined, even when I define the name
NameError: name is not defined, even when I define the name
我正在编写一个程序,使用 BoyerMoore 算法解析与文本匹配的文本模式。我设法得到了找到所有匹配项的代码,并打印出匹配项的位置。
现在我也尝试获取match_table的长度和比较的次数。我对 python 很陌生,程序告诉我“NameError:名称 'comparison' 未定义,即使它在 def boyer_moore 中使用。
该程序显然不保存变量供以后使用。如果这听起来令人困惑,我很抱歉,我是 python 的新手。匹配的文本可以是 found here
def make_bad_match_table(pattern):
length = len(pattern)
table = {}
for i, c in enumerate(pattern):
if i == length-1 and not c in table:
table[c] = length
else:
table[c] = length - i - 1
return table
def boyer_moore(pattern, text):
comparison = 0
match_table = []
pattern_length = len(pattern)
text_length = len(text)
if pattern_length > text_length:
return match_table
table = make_bad_match_table(pattern)
index = pattern_length - 1
pattern_index = pattern_length - 1
while index < text_length:
if pattern[pattern_index] == text[index]:
if pattern_index == 0:
match_table.append(index)
pattern_index = pattern_length - 1
index += (pattern_length * 2 - 1)
comparison +=1
else:
pattern_index -= 1
index -= 1
else:
index += table.get(text[index], pattern_length)
pattern_index = pattern_length - 1
return match_table
return comparison
if __name__ == '__main__':
file = open("CNN.txt", "r")
target = file.read()
pattern = "NASA"
print(pattern,boyer_moore(pattern, target))
print(len(match_table))
print(comparison)
您也不能在 return 语句之后添加语句,因此您必须删除 boyer_moore 函数末尾的 return 之一。
return match_table
return comparison
1.Firstly 而不是
return match_table
return comparison
就这样
return (match_table, comparison)
2.Instead 的:
print(pattern,boyer_moore(pattern, target))
print(len(match_table))
print(comparison)
就这样:
match_table, comparsion = boyer_moore(pattern, target)
print(pattern)
print(comparison, len(match_table))
希望现在对您有所帮助。
我正在编写一个程序,使用 BoyerMoore 算法解析与文本匹配的文本模式。我设法得到了找到所有匹配项的代码,并打印出匹配项的位置。
现在我也尝试获取match_table的长度和比较的次数。我对 python 很陌生,程序告诉我“NameError:名称 'comparison' 未定义,即使它在 def boyer_moore 中使用。 该程序显然不保存变量供以后使用。如果这听起来令人困惑,我很抱歉,我是 python 的新手。匹配的文本可以是 found here
def make_bad_match_table(pattern):
length = len(pattern)
table = {}
for i, c in enumerate(pattern):
if i == length-1 and not c in table:
table[c] = length
else:
table[c] = length - i - 1
return table
def boyer_moore(pattern, text):
comparison = 0
match_table = []
pattern_length = len(pattern)
text_length = len(text)
if pattern_length > text_length:
return match_table
table = make_bad_match_table(pattern)
index = pattern_length - 1
pattern_index = pattern_length - 1
while index < text_length:
if pattern[pattern_index] == text[index]:
if pattern_index == 0:
match_table.append(index)
pattern_index = pattern_length - 1
index += (pattern_length * 2 - 1)
comparison +=1
else:
pattern_index -= 1
index -= 1
else:
index += table.get(text[index], pattern_length)
pattern_index = pattern_length - 1
return match_table
return comparison
if __name__ == '__main__':
file = open("CNN.txt", "r")
target = file.read()
pattern = "NASA"
print(pattern,boyer_moore(pattern, target))
print(len(match_table))
print(comparison)
您也不能在 return 语句之后添加语句,因此您必须删除 boyer_moore 函数末尾的 return 之一。
return match_table
return comparison
1.Firstly 而不是
return match_table
return comparison
就这样
return (match_table, comparison)
2.Instead 的:
print(pattern,boyer_moore(pattern, target))
print(len(match_table))
print(comparison)
就这样:
match_table, comparsion = boyer_moore(pattern, target)
print(pattern)
print(comparison, len(match_table))
希望现在对您有所帮助。