2017-07-21 5 views
0

簡単な質問ですが、迷惑です。私はさまざまな要因の一連の製品をループして、各製品をファイルに印刷しようとしています。私は "with"ステートメントを使用して動作するようにコードを取得することはできますが、それがなくても動作させることはできず、理由を理解できません。私はファイルを開いて、それからいつものように閉じています。コードは以下の通りである:それはで最後の行に失敗しているPythonは印刷出力をループオーバーファイルにリダイレクトします

f = open('out.txt', 'w') 
for num1 in range(100,999): 
    for num2 in range(100,999): 
     product=num1*num2 
     length=len(str(product)) 
     if length % 2 == 0: 
      #halfway_point= 
      print >> f, product 
f.close() 

:あなたの構文エラーはまた、あなたにファイルが、印刷するために書いていないので、print >> f, product

で来ている

SyntaxError: invalid syntax 
+5

本当に 'print >> f、product'はありますか? – DavidG

答えて

2

ないあなたは、Python 2やPython 3にいずれかの方法を使用しているかどうかを確認してください、あなたがSyntaxErrorを見ているという事実は、対話インタプリタセッションが使用されていることを示唆しています。

私はあなたがPython 2を使用していると仮定します。print >> expression, expressionはPython 2で有効なprint statementであり、コード内での使用法は正しいです。これは単に、printステートメントの2番目の式の文字列値を最初の式で指定されたファイルのようなオブジェクトにリダイレクトすることを意味します。この文は、おそらくあなたはPythonの対話セッションにコードを貼り付けている、そしてもしそうなら、あなたがclose()を実行する前に「近い」に余分な改行、前forループを追加する必要がありますのPython 3に

使用できません。そうでなければSyntaxErrorが得られます。

$ python2 somefile.py 

を、または単に対話インタプリタを使用している場合、余分な改行を入力してください:あなたは、Python 2スクリプトファイルにそのコードを追加し、それを実行した場合

は、それが動作します。

Pythonの3のために、あなたはこれを行うだろう:

print('{}'.format(product), file=f) 
また __future__モジュールからそれをインポートすることにより、Pythonの2に同じ print()機能を使用することができ

:どちらの場合も、あなたがすべきでは

from __future__ import print_function 

をあなたの質問に言及したようにwith声明を使用してください。

+0

こんにちはmhawke - ありがとう。あなたは問題を完全に記述しました。バージョンは2.7.10ですが、私はループの後で失敗するインタプリタを実行していました。なぜ、インタープリタはそれを閉じるために余分なラインを必要としますか? – dodgerstjw

+0

@dodgerstjw:[この回答を確認](https:// stackoverflow。com/a/41988906/21945)を参照してください。 – mhawke

-1

コンソール。

あなたが代わりにprint >> f, productf.write(str(product) + '\n')ラインを必要とする(私は何print >> f, product手段を知らない)

これは私が何print >> f, product手段を知らないのpython3

f = open('out.txt', 'w') 
for num1 in range(100,999): 
    for num2 in range(100,999): 
     product=num1*num2 
     length=len(str(product)) 
     if length % 2 == 0: 
      #halfway_point= 
      f.write(str(product) + '\n') 
f.close() 
0

に私のためだけで正常に動作します。しかし、あなたがこの方法を試すことができます。

f = open('out.txt', 'w') 
for num1 in range(100,999): 
    for num2 in range(100,999): 
     product=num1*num2 
     length=len(str(product)) 
     if length % 2 == 0: 
       #halfway_point= 
       # print >> f, product 
       print(str(product)) # print in the console 
       f.write(str(product) + "\n") 
f.close() 
関連する問題