gpt4 book ai didi

Python IndentationError - 如何重构?

转载 作者:太空狗 更新时间:2023-10-30 02:22:05 25 4
gpt4 key购买 nike

我正在做 Project Euler编程练习的问题,以便自学。我非常了解如何以数学方式解决问题,以及如何以编程方式解决问题。

但是,我必须想出一些疯狂的代码才能做到这一点; 100 个嵌套循环和 Python 在 100 个缩进级别上滑稽地引发了这个错误,并且可能是正确的:

IndentationError: too many levels of indentation



tally = 0
ceiling = 100
for integer_1 in range(0, 100, 1):
for integer_2 in range(0, 100 - integer_1, 2):
for integer_3 in range(0, 100 - integer_1 - integer_2, 3):
for integer_4 ....
for integer_5 ....
etc.
etc.
all the way to integer_100

我已经通过谷歌寻找解决方案,但这个问题非常罕见,几乎没有关于这个主题的文献,我只能找到另一个堆栈溢出问题(Python IndentationError: too many levels of indentation),我找不到对我的问题有用的东西.

我的问题是 - 有没有办法采用我的解决方案并找到一些解决方法或以使其有效的方式重构它?我真的很难过。

编辑:

多亏了 nneonneo 的回答,我才得以解决这个问题。我的代码仅供将来寻找正确重构代码的方法的人们引用。

from time import time
t = time()
count_rec_dict = {}

# for finding ways to sum to 100
def count_rec(cursum, level):
global count_rec_dict

# 99 is the last integer that we could be using,
# so prevent the algorithm from going further.
if level == 99:
if cursum == 100:
return 1
else:
return 0

res = 0

for i in xrange(0, 101-cursum, level+1):

# fetch branch value from the dictionary
if (cursum+i, level+1) in count_rec_dict:
res += count_rec_dict[(cursum+i, level+1)]

# add branch value to the dictionary
else:
count_rec_dict[(cursum+i, level+1)] = count_rec(cursum+i, level+1)
res += count_rec_dict[(cursum+i, level+1)]

return res}

print count_rec(0, 0)
print time() - t

它在我的电脑上以惊人的 0.041 秒运行。哇!!!!!我今天学到了一些新东西!

最佳答案

递归解决方案应该做得很好,尽管我确信有一个完全不同的解决方案不需要这种操作。

def count_rec(cursum, level):
if level == 100:
return 1
res = 0
for i in xrange(0, 100-cursum, level+1):
res += count_rec(cursum+i, level+1)
return res

print count_rec(0, 0)

有趣的是,如果你内存这个函数,它实际上会有一个合理的运行时间(这就是动态规划的力量)。玩得开心!

关于Python IndentationError - 如何重构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com