1
  • 安全なテスト値を決定するために Python プログラミングで使用される方法論はありますか? 偶発的な大きな値がリスクにつながらないようにするための何か。
  • Python では型チェックが推奨されていないことを読みました。そのような場合、型チェックまたは境界チェックを行うべきですか、それとも代替手段はありますか?


私はこのコードで作業し、実行時間をテストしていました。誤って非常に大きな数値を入力してコードを実行してしまいました。850MBのRAM使用量に達して上昇したときに、タスクマネージャーを介して停止することができました. もう二度とあんなことはしたくない。

def primes_list(num):
    ans = [2]
    for i in range(3, num, 2):

        temp = False
        for j in ans:
            if i % j == 0 or j*j > i:
                temp = True
                break

        if temp == False:
            ans.append(i)
    else:
        return ans
4

4 に答える 4

1

あなたの正確な問題は、コマンド ラインで関数をテストしているときに入力した値が大きすぎることでした。ここでの解決策は、関数を変更することではなく、自動テストを使用することです。

最も単純な自動テストとは、関数を呼び出して正しい値を返すことを確認する別の関数を作成することを意味します。コンピューターは、コマンド ラインで行ってきたこととまったく同じことを行います。ただし、テスト関数がファイルに保存されるため、自動化されたアプローチの方が優れています。毎回コマンド プロンプトでテスト値を入力する必要はありません。したがって、基本的に、間違った番号を入力してメモリ オーバーフローが発生することはありません。にもたくさん 利点があります。

Python の標準ライブラリには、単体テストの編成と実行に役立つように設計されunittestモジュールが含まれています。unittest hereのその他の例。代替手段にはNosepy.testがあり、どちらも と相互互換性がありunittestます。


関数の例primes_list:

import unittest

class TestPrimes(unittest.TestCase):
    def test_primes_list(self):
        pl = primes_list(11)  # call the function being tested
        wanted = [2,3,5,7,11]  # the result we expect
        self.AssertEqual(pl, wanted)

if __name__ == "__main__":
    unittest.main()

自動テストが機能することを証明するために、関数のバグが原因で失敗するテストを作成しました。(ヒント: 指定された最大値が素数の場合、出力には含まれません)

于 2013-05-24T12:16:13.417 に答える
0

素数をリストしようとしていませんか?これが役立つかどうかはわかりませんが、それでも:

def primes(n): // n is the maximum number we want to check
    if n==2: return [2] // 2 is the lowest prime number
    elif n<2: return [] // there's no prime number below 2
    s=range(3,n+1,2) // range from 2 by 2 numbers, leave out even numbers
    mroot = n ** 0.5 // get's the root of maximum number
    half=(n+1)/2-1
    i=0
    m=3
    while m <= mroot: // no point in checking above the root of the highest number
            if s[i]:
                    j=(m*m-3)/2
                    s[j]=0
                    while j<half:
                            s[j]=0
                            j+=m
            i=i+1
            m=2*i+3
    return [2]+[x for x in s if x] // final array consists of 2 and the rest of primes

素数決定アルゴリズムの詳細については、以下をご覧ください。

http://en.wikipedia.org/wiki/Primality_test

素数を見つける最も速いアルゴリズムはどれですか?

于 2013-05-24T11:38:22.770 に答える