3
def pi(times):
    seq = []
    counter = 0
    for x in range(times):
        counter += 2
        seq.append("((%f**2)/(%f*%f))*"%(float(counter), float(counter-1), float(counter+1)))
    seq.append("1.0")
    seq = "".join(seq)
    seq = eval(seq)
    return seq*2

85000 タームを超えると、セグメンテーション違反が発生し、Python が終了します。どうすればこれを回避できますか? なぜクラッシュするのですか?もっとメモリか何かを使用してください

4

2 に答える 2

5

eval非常に長い式を処理できないバグを発見したようです:

>>> eval("1.0*"*10000+"1.0")
1.0
>>> eval("1.0*"*100000+"1.0")
# segfault here

私は「めちゃくちゃ長い」という言葉を忠告的に使っています。そのようにしないでください、あなたが行くようにピースを計算してください。evalこの状況で使用する理由はありません。

于 2011-03-03T07:02:45.553 に答える
2

なぜeval()まったく使用するのですか?

def pi(times):
    val = 1
    counter = 0
    for x in range(times) :
        counter += 2
        val *= float(counter)**2/(counter**2 - 1)
    return val * 2

まったく同じことをします。

于 2011-03-03T07:06:52.887 に答える