2016-10-21 11 views
-8

私は与えられた範囲内の素数を計算するPythonツールをコード化しました。それで、シェルから数値をコピーし、txtファイルを作成し、それらを毎回貼り付けるのは面倒で、テキストファイルに素数を挿入するツールがあれば非常に便利です。素数をテキストファイルに印刷するPythonを取得するにはどうすればよいですか?

が、私はこれを試してみました:

def calc(): 
    while True: 
     x = int(input("Please specify the lower end of the range....")) 
     y = int(input("Please specify the upper end of the range....")) 
     for n in range (x,y): 
      if all(n%i!=0 for i in range (2,n)): 
       a=[] 
       a.append(n) 
       fo = open('primes.txt', 'w') 
       print (">>>Writing the values to primes.txt...") 
       print ("##########Calculated by my prime calculator##########", file = fo) 
       print ("", file = fo) 
       print ((a), file = fo) 
       fo.close 
     s = input('To do another calculation input yes, to quit input anything else...') 
     if s == 'yes': 
      continue  
     else: 
      break 
calc() 

編集:私はしかし、問題

を解決FOとして

は( "primes.txt"、 "A")のオープンを使用して、私は「couldn n個の値をメモリに保存し、それらを増加するリストに追加するPythonを取得します。

あなたは素晴らしいです。 Pythonが愚かであるというその部分は、ユーモラスなスタートロールの試みでした。

+0

それを行うにして使用する必要があるすべてでこれを行うべきではありませんしたいですちなみに、 'fo.close'は何もしません。メソッドを呼び出すには 'fo.close()'が必要ですが、実際には 'with open(...)as fo'を使って自動的に閉じなければなりません。 –

答えて

3
fo = open('primes.txt', 'w') #tells python to open the file and delete everything in it 

おそらくあなたは

fo = open('primes.txt', 'a') # tells python to append to the file 

が本当にあなたが安全にファイルを開いて、一度だけ、ループの外

with open("primes.txt","w") as fo: 
    for n in range (x,y): 
     if all(n%i!=0 for i in range (2,n)): 
      a=[] 
      a.append(n)    
      print (">>>Writing the values to primes.txt...") 
      print ("##########Calculated by my prime calculator##########", file = fo) 
      print ("", file = fo) 
      print ((a), file = fo) 
+1

ファイルディスクリプタを開くか閉じるには – tinySandy

+1

を使用してください。この種の機能はありますが、それは正しい解決策ではありません。あなたはあなたが書いているプラ​​イムごとにファイルを開くべきではありません。代わりに、それらをメモリに保存し、終了したらすぐにファイルを開くか、起動する前にファイルを一度開きます。 –

+0

私は可能な限り小さな変更を提供しようとしていて、なぜコードが機能していなかったのかを説明しています...この回答は両方のことをしています...私はベストプラクティスについての接線を外すことができますね –

関連する問題