ぴろの狂人日記

2014年から頑張ってブログを継続しようと思います。「継続と習慣」を今年の目標にしたので、頑張って更新を続けようと思います。おいおいはレビューや数学や認知科学などについて記事を書いていければと思っています

python3.0以降のprint文

pythonについて、つまづいていたことが解決したので、覚書の意味も含めて書いておこうと思う。

ことの発端は、AOJの問題を解いて練習していたときのこと。

最初のうちはサイトの中でコンパイルが通るかどうかだけで、正解不正解を判断していたのだが、それでは効率が悪いと思い、一度自分のPCでコンパイルをしてみて、そのうえで提出する方針に切り替えた。

切り替えて最初の問題。

以下のコードを実行しようとするにもsyntax errorがでる。


while true:
H,W = map(int,raw_input().split())
 if W==0 and H==0 :
    break

 print '#' * W + '\n'
 
 print ('#'+ '.'*(W-2)+ '#'+'\n')*(H-2)
 print '#'*W + '\n'

出てくるエラーはこれ。


print '#' * W + '\n
        ^

いろいろ原因を探るもわからず。

『初めてのpython 第3版』の文字列の章も見てみるが、特にprint文や文字列の扱いは間違っていないように見える。。。そんな感じで、行き詰っていた。

 

しかし、もっとよく調べてみると書いてあった。

ver3.0から仕様が変わったらしい。

「はじめに」の14ページからの「python3.0からの仕様変更について」の部分を順番に読んでいくと、

printはステートメントではなく関数になり機能が増える。print x, yではなくprint(x, y)と書くようになる。

と記述がある。

あるいは、本文の第10章[pythonステートメント」218ページの脚注に

python 3.0では、printとexecはステートメントではなく関数になる予定です。

とある。

それを踏まえて、pythonインストール時についてきたマニュアルもみてみる。

マニュアルを開くには例えば以下の方法で開く。

    1. デスクトップのスタートボタンを開き、「すべてのプログラム」を表示すると、その中に「python x.x」のフォルダがある(自分はpython3.3だったので、python3.3というフォルダ)。

      その中の、「Python manuals」というファイルがある。

       

    2. あるいは、デスクトップのマイコンピュータのアイコン(自分はwindows7なので。XPとかの人はコンピュータというアイコン)を開き、C:のドライブを開き、その中の「Pythonxx」というフォルダを開き、その中の「Doc」フォルダを開き、その中の「pythonxxx.chm」というファイルを開く。

開いたら、画面の左側の「What's New in Python」の階層を開き、「What's New in Python3.0」をクリック。

少し画面を下にスクロールすると、「Print Is A Function」とという見出しがあり、その旨の記述がある。

ということで、print "Hello world" ではダメで、print("Hello world")と書くらしい。