【Python】No.9000 Hello World! - yukicoder
python2で解く。
※私がPythonの学習のために解説する記事なので間違い等あるかもしれません。
問題URL: https://yukicoder.me/problems/no/9000
ソースコード
#! /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'関数(先程定義したやつ)を実行。