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インストール時についてきたマニュアルもみてみる。
マニュアルを開くには例えば以下の方法で開く。
開いたら、画面の左側の「What's New in Python」の階層を開き、「What's New in Python3.0」をクリック。
少し画面を下にスクロールすると、「Print Is A Function」とという見出しがあり、その旨の記述がある。
ということで、print "Hello world" ではダメで、print("Hello world")と書くらしい。