君は牛を二頭持っている

渋谷あたりのエンジニアのブログ。OSからウェッブなフロントエンドまでとか色々。

超初心者向けPython入門

このポストは研究室内で行った勉強会の内容を基に書いています

Python2.7を対象にしていますが、Python3以降でも動くようにソースを書いています。
どうしようもない場合は2つのバージョンを書いています
追記:投稿後3分で@utisamくんからFizzBuzzソースがPython3で動かない旨の指摘が入りました。ありがとうございます!!謹んで修正いたしました

はじめに

Python チュートリアル — Python 3.3 documentation ここ読んだほうが早いかも知れない

このポストでは、Pythonの(見た目的な)特徴と組み込み関数(のごく一部)と制御構造(の一部)とデータ構造(の一部)を紹介しています。
多分、FizzBuzzに毛が生えた程度のことができるようになります。
以下の様な方を対象にしています。

  • とりあえず,学校でC言語覚えたし別のプログラミング言語でどんなのあるか知りたい
  • スクリプト言語の雰囲気だけちょっと見てみたい
  • なにはともあれPython書いてみたいがHelloWorldとかチマチマやるの面倒だけど,特に自分で勉強するほどの気分でもない!

逆に以下の様な内容はありません。聞かれたら分かるかもしれないし分からないかも知れません

特徴

  • かわいいらしい

最近、こんなポストもあったのでPythonは一般的にはかわいいという印象なのかなあと思います。

  • 文法が特徴的

ブロック構造をインデントで表すPythonの文法は特徴的です。恐れることはありません。みんなが大好きHaskellもこんな感じですし、すぐに慣れます。

if True:
    print "False"
else:
    print "True"
return

インデントはスペース4つです。

  • ぶっちゃけ見た目的な特徴とかはそこまで重要ではないので、ここ(PYTHONとは)とか見て、Pythonの凄さの一端を感じ取ってください。

FizzBuzz

Hello Worldは一行で終わるのでFizzBuzz書きましょう
Mac OSだったりLinuxの人気のディストリなら、シェルで"python"と打つと、対話型の環境が立ち上がります。
"python ファイル名"で、引数として与えたファイルを実行します。
入ってなかったらhomebrewだったりaptだったりyumだったりで入れてください。

for i in range(1,101):
    if i%15 == 0:
        print ('FizzBuzz')
    elif i%5 == 0:
        print ('Buzz')
    elif i%3 == 0:
        print ('Fizz')
    else:
        print (i)

基本的な関数(標準入出力)

  • 標準出力
print ('Hello World')

Python2系だと括弧はなくても良いです。
この辺りはバージョンが上がる際に実装が変わっていますが、このポストでは省略します

  • 標準入力

Python 2系だと

x = raw_input('Please input ')

3系だと

x = input('Please input ')

が普通だと思います

データ構造の一部

便利な関数とかあるので、公式読んだほうが良いです。5. データ構造 — Python 3.3 documentation

  • 共通して言えること:整数と小数とか、真偽値(bool)と文字列とか色々なものが一緒の配列に入ったりします。これはRubyとかPerlも同じです
  • list:普通の配列
lst1 = [5, 'val1', 1.2, True]
print (lst1[1]) # val1
  • dictionary:数字以外にも色々なもの(文字列とか)が添字として使える配列みたいなイメージ
dic = {'key1':'val', 'key2':0}
print (dic['key1']) # val
print (dic['key2']) # 0

制御構造の一部

  • for:繰り返し
Python の for 文は、読者が C 言語や Pascal 言語で使いなれているかもしれない for 文とは少し違います。(Pascal のように) 常に算術型の数列にわたる反復を行ったり、(C のように) 繰返しステップと停止条件を両方ともユーザが定義できるようにするのとは違い、Python の for 文は、任意のシーケンス型 (リストまたは文字列) にわたって反復を行います。反復の順番はシーケンス中に要素が現れる順番です。(公式より)

つまり

lst = [1, 'val', 0]
for i in lst:
    print (i)

の出力結果は

1, val, 0

です。JavaとかC++のboostだとforeachとかいう名前で出てくると思います。

  • if:条件分岐

普通です

x = 10
if x % 2 == 0:
    print (x, "is an even number.")
else:
    print (x, "is an odd number.")
  • while:条件分岐

これも普通です。

その他便利な色々

  • help(obj):引数objの説明が出る場合もある。出ない場合もある。
  • len(obj):引数objの長さを調べる。色々なもの(配列、文字列、その他オブジェクト)が長さを持っています。
  • range(int[, int[, int]]):C言語で for(i = 0; i< 10; i++)みたいなことがやりたいときに便利。FizzBuzzの例でも使ってます。
    • Python2系:引数で与えられた数でリストを生成します。1つの時は0~引数の範囲で1区切りのリストを生成します(0, 1, 2, ...., n - 1)。2つ与えられた時は引数1~引数2の範囲で生成します。3つ与えられた時は,引数3の値の間隔でリストを生成します。(range(1, 10 , 2) => [1, 3, 5, 7, 9])
    • Python3系:同じような使い方ができるrangeオブジェクトを生成します。
  • シェルでpydoc(モジュール名):モジュールのhelpが出る。

補足

  • このポストの内容だけだとFizzBuzzぐらいしか書けないので,FizzBuzz書いてみて楽しそうだったら公式読んでみてください。今日紹介したデータ構造のもっと便利な機能とかもあります。
  • ipythonという便利な環境があるので、みなさん入れましょう
  • 正直、この程度の量では最低限のことすら書けなかったのだが、とりあえず公開してみました。Python初学者に誤解与えるからやめろとか言うご意見お待ちしております