0

基本的な python スクリプトの任意の時点でアクションを実行できるかどうか疑問に思っていたので、いつ終了したかを教えてください。素数を見つけるための次のコードがあります(楽しみのために)

number = 1
primelist = []
nonprime = []

while number < 1000:

    number += 1

    for i in range(number):
        if i != 1 and i != number and i !=0:
            if number%i == 0:
                nonprime.append(number)
            else:
                primelist.append(number)

nonprimes = open("nonprimes.txt", "w")

for nonprime in set(primelist) & set(nonprime):
    nonprimes.write(str(nonprime) + ", ")

nonprimes.close()

基本的に、スクリプトが停止しているので、最後の部分を実行したかったのです。これが不可能な場合、プログラムの実行中に「スペース」を押してリストを保存する方法はありますか?

事前に乾杯:)

編集:

提案どおりに atexit モジュールを含めるようにコードを変更しましたが、機能していないようです。ここにあります:

インポート時間、atexit

class primes():



    def __init__(self):

        self.work(1)

    def work(self, number):

        number = 1
        self.primelist = []
        self.nonprime = []

        while number < 20:
            time.sleep(0.1)
            print "Done"

            number += 1

            for i in range(number):
                if i != 1 and i != number and i !=0:
                    if number%i == 0:
                        self.nonprime.append(number)
                    else:
                        self.primelist.append(number)

        nonprimes = open("nonprimes.txt", "w")

        for nonprime in set(self.primelist) & set(self.nonprime):
            nonprimes.write(str(nonprime) + ", ")

        nonprimes.close()


    def exiting(self, primelist, nonprimelist):
        primelist = self.primelist
        nonprimelist = self.nonprime

        nonprimes = open("nonprimes.txt", "w")

        for nonprime in set(self.primelist) & set(self.nonprime):
            nonprimes.write(str(nonprime) + ", ")

        nonprimes.close()

atexit.register(exiting)


if __name__ == "__main__":
    primes()
4

2 に答える 2

0

Pythonには、スクリプトの終了時に実行するコードを登録できるatexitモジュールがあります。

import atexit, sys

def doSomethingAtExit():
    print "Doing something on exit"

atexit.register(doSomethingAtExit)

if __name__ == "__main__":
    sys.exit(1)
    print "This won't get called"
于 2013-02-28T12:36:29.427 に答える
0

私はかなり確信していますが、ファイルオブジェクトがクリーンアップを行い、ファイルが再利用されるときにファイルにフラッシュします。これを行う最善の方法は、 with ステートメントを使用することです。

with open("nonprimes.txt", "w") as nonprimes:
    for nonprime in set(primelist) & set(nonprime):
        nonprimes.write(str(nonprime) + ", ")

ファイルを閉じるボイラー プレート コードなどは、ステートメントの終了時に自動的に実行されます。

于 2013-02-28T12:19:05.133 に答える