擅长:python、mysql、java
<p>变量a、length和epsilon存在范围问题。您可以在findstart中定义它,但尝试在findend中访问它。</p>
<p>另外,传递给readline的变量x并没有做您认为的事情。read line总是返回文件中的下一行,传递给它的变量是一个可选的行长度提示,而不是应该读取哪一行。要对特定行执行操作,请先将整个文件读入列表:</p>
<pre><code># Read lines from file
with open("i.txt", "r") as f:
# Read lines and remove newline at the end of each line
lines = [l.strip() for l in f.readlines()]
# Remove the blank lines
lines = filter(lambda l: l, lines)
EPSILON = 7
A = 3
length = 0
#Detect start point
def findstart( x ):
global length
length = 0
line_value = int(lines[x])
if line_value == A:
length += 1
x += 1
findend(x)
elif line_value == EPSILON:
x += 2
findstart(x)
else:
x += 1
findstart(x)
#Detect end point
def findend(x):
global length
line_value = int(lines[x])
if line_value == A:
length += 1
return ("Accept", length)
elif line_value == EPSILON:
x += 2
length += 2
findend(x)
else:
x += 1
length += 1
findend(x)
findstart(0)
</code></pre>