2014年5月8日木曜日

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")と書くらしい。

0 件のコメント:

コメントを投稿