turtlechanのブログ

無知の私がLinuxをいじりながら書いていくブログ

【Python】No.9000 Hello World! - yukicoder

python2で解く。
※私がPythonの学習のために解説する記事なので間違い等あるかもしれません。

問題URL: https://yukicoder.me/problems/no/9000

ソースコード

no9000.py
#! /usr/bin/env python
# coding: utf-8


def main():
    s = 'Hello World!'
    print('{0}'.format(s))


if __name__ == '__main__':
    main()

解説

単純に次のコードでも通るはず。

print 'Hello World!'

これだけだとつまらないので今回は本来不要なものまで書いた。

1行目

#! /usr/bin/env python

'#!'はshebang(シバン)と言われるもの。

Unix系(互換)OSのシェルで実行可能ファイルとして扱うときに必要。シェルはシバンによって書かれたプログラムを使い、このファイルを処理する。

2行目

# coding: utf-8

エンコード宣言と言われるもの。

ソースコードをどの文字コードを使って解釈すれば良いかを指定している。python2ではソースコード内にマルチバイト文字(日本語など)が含まれている際に必要。含まれていなくても指定しておいた方が無難である。python2の場合、エンコード宣言をしていないと'ASCII'で解釈されるが、マルチバイト文字は'ASCII'では扱えない。
python3ではエンコード宣言がなくてもデフォルトで'utf-8'で解釈される。

5 ~ 7行目

def main():
    s = 'Hello World!'
    print('{0}'.format(s))

1行目 def main(): で main という関数の定義。() は引数を受け取るときに仮引数名をカッコ内に書く。今回は引数なしなので空。

2行目は 変数s に'Hello World!'という文字列を代入。

3行目 print で画面に出力している。python2では print は関数ではなくステートメント。本来カッコは不要。python3で書くときにカッコを忘れてエラーを頻発するので、こうやって書くようにしている。

'{0}'.format(s)

format は文字列型のメソッド。文字列内の {} に引数の値を挿入してくれる。他にも色々便利な機能あり。

10 ~ 11行目

if __name__ == '__main__':
    main()

1行目は「もし変数__name__の値が'__main__'という文字列だったら実行」という意味。Pythonでは頻繁に見かけるイディオム(慣用句)。
__name__ は特殊な変数でpythonが勝手に値を代入してくれている。

~$ python no9000.py

上記のように直接実行したときは __name__ に'__main__'が代入される。
また、他のpythonスクリプトで import から呼び出されたときは __name__ にはファイル名('no9000')が代入される。
アンダースコア(_)が前後に2つ連続して付いた変数やメソッドはPythonで特殊な動作をすることを表している。

2行目は'main'関数(先程定義したやつ)を実行。