从这里开始是python程序员。我目前坚持编写一个小的python脚本,该脚本将打开txt源文件,并使用正则表达式(在这种情况下为107.5)在该源文件中找到一个特定的数字,并最终用一个新数字替换该107.5。新号码来自另一个包含30个数字的txt文件。每次替换数字时,脚本都会使用下一个数字进行替换。尽管命令提示符似乎确实可以成功打印并替换,但是在第30次循环之后会出现“ IndexError:列表索引超出范围” ...
我的饥饿感是我必须以某种方式将循环限制为“ for i in range x”。但是,我不确定这应该是哪个列表,以及如何在当前代码中合并该循环限制。任何帮助深表感谢!
nTemplate = [" "]
output = open(r'C:\Users\Sammy\Downloads\output.txt','rw+')
count = 0
for line in templateImport:
priceValue = re.compile(r'107.5')
if priceValue.sub(pllines[count], line) != None:
priceValue.sub(pllines[count], line)
nTemplate.append(line)
count = count + 1
print('found a match. replaced ' + '107.5 ' + 'with ' + pllines[count] )
print(nTemplate)
else:
nTemplate.append(line)
答案 0 :(得分:0)
之所以引发def permCheck(a: Array[Int]): Int = {
def maxAndHash(a: Array[Int], hash: HashSet[Int], max: Int, acc: Int): Option[(Int, Int)] = a match {
case Array() => Some((max, acc))
case _ => {
val head = a.head
if (hash.contains(head)) None
else maxAndHash(a.tail, hash + head, if (max < head) head else max, acc + 1)
}
}
maxAndHash(a, HashSet[Int](), Int.MinValue, 0) match {
case None => 0
case Some((max, acc)) => if (acc == max) 1 else 0
}
}
是因为您在循环的每次迭代中都递增IndexError
,但是没有根据count
列表实际包含的值添加上限。您应该在到达pllines
时退出循环,以免出错。
您可能尚未注意到的另一个问题是使用len(pllines)
方法。它返回带有适当替换的新字符串,而不修改原始字符串。
如果字符串中不存在该模式,它将返回原始值本身。因此,您的re.sub()
列表可能从未附加任何替换的字符串。除非在行中找到该模式,否则除非您需要执行其他操作,否则您可以取消nTemplate
条件(就像我在下面的示例中那样)。
由于if
对象的所有行都是相同的,因此可以将其移到循环之外。
以下代码应该起作用:
priceValue