3DプリンタとITとプリキュアのブログ

大学でプログラミングに出会って、ズブズブにハマってしまった情報系学生の書くブログです。

Cしか書けない人のためのPython

実質Cしか書けなかった僕が、Pythonをふんわり書けるようになったので、Cしか書けない人がPythonを勉強したいときに見ると良いエントリを書きます。

ただし僕はPython初心者なので、間違っていたり不適切な部分がある可能性が高いので、注意してください。

ちなみにPython 2.7です。

 

 

PythonC言語の違い

PythonC言語みたいなコンパイル言語と違ってスクリプト言語(なので遅いけど書きやすい)です。拡張子は.pyです。

$ python hoge.py

で実行できる。pythonコマンドを引数を与えずに実行すればインタプリタが起動するので、使い捨てのちょっとした事務処理を書きたいときとか超便利。

コンパイルしようと思えばできる。

Python 2.*とPython 3.*で全然違うらしいので、環境構築のときは注意した方がいい。

 

# -*- coding:UTF-8 -*-

Pythonではソースコード中に日本語を使いたい場合は初めにこれを書かないとダメ。

C(というかC++)でいう「//」は、Pythonでは「#」にあたるので、これはコメントなんですけど、マジックコメントといってコメントなのに、プログラムに影響を与えます。

マジックコメントは他にもいくつかあるらしい。

コメントに日本語を使いたい場合も、これがないと動きません。

いきなり書くことではないですけど、結構衝撃的だったので。

 

import

include文のようなものです。

import hoge

で使えます。

from hoge import fuga

とするとhogeの中のfugaが使えます。

stdio.h的な大概importしないといけないようなものはないです。

 

変数

Pythonでは変数に型はありません。

型はちゃんとあるんだけど謎の力で宣言する必要がない。

hoge = 57

だとhogeには整数の57が入ります。

fuga = "グロタンディーク"

だとfugaには文字列の「グロタンディーク」が入ります。

あと、Pythonに定数はなくて、一般に全部大文字の変数は定数とすることが多いみたいです。

 

配列

Pythonの配列は、配列ではなくて連想配列(リスト)です。

hoge = ["fuga","piyo"]

こんな感じで宣言します。

各要素にアクセスする方法はC言語と同じです。

 

連想配列なので、要素を後から増やすことができます。

hoge = ["fuga","piyo"]
hoge.insert(0,"hogehoge")

hoge[0]に"hogehoge"が追加されます。

元々あった要素は後ろにズラされて、hoge[1]で"fuga"、hoge[2]で"piyo"にアクセスできます。

 

もちろん要素の削除もできる。

hoge = ["hogehoge","fuga","piyo"]
hoge.pop(1)

hoge[1]の"fuga"が削除されます。

 

ソートもできる。

hoge = [3,5,1,2,4]
hoge.sort()

これは昇順でソートされるので、降順にソートしたい場合は

hoge = [3,5,1,2,4]
hoge.sort(reverse=True)

 

素数も調べられる。

len(hoge)

 

辞書配列

これはC言語にはない機能です。

文字列が添え字の代わりとして使える配列を辞書配列といいます(詳しい人に怒られそうな表現)

hoge = {"hoge":1,"fuga":2,"piyo":3}

で宣言します。連想配列は[ ]で宣言したのに対して、辞書配列は{ }で宣言するので注意してください。

なんとなく分かると思いますけど、この例だと"hoge"に1が、"fuga"に2が、"piyo"に3が対応しています。

 

各要素へのアクセスは文字列を添え字の代わりに使います。

hoge["piyo"]

辞書なのでそれはそう。

"piyo"みたいな添え字代わりの文字列は「キー」と呼ばれます。

 

要素を追加できます。

hoge = {"hoge":1,"fuga":2}
hoge["piyo"] = 3

あたかもそういうキーがあったかのように要素を追加できる。

 存在するキーを指定すると普通に上書きされちゃうので、入力に合わせて要素を追加していくような処理を書く時は注意が必要かもしれないです。

 

要素の削除は連想配列と一緒。

hoge = {"hoge":1,"fuga":2,"piyo":3}
hoge.pop(piyo)

 

素数の取得も連想配列と一緒。

len(hoge)

len()便利だね。 

 

で、ソートは?って思ったそこのアナタ。

Pythonの辞書は順番が保証されないのでソートできません。

 

関数

Pythonの関数は例によって返り値の型を宣言する必要はないです。

def func(hoge,fuga):
hoge += 1
fuga += 1
piyo = hoge + fuga

return piyo 

returnはあってもなくても大丈夫。

Pythonではブロックをインデントで表現するので、C言語みたいに{ }で囲う必要はありません。

C言語に慣れていると関数定義のあとのコロンを忘れがちなので注意してください。 

 

標準入出力

入力 → hoge = raw_input()

出力 → print hoge

これで全部いける。

printは賢いので、hogeが配列でも辞書でもちゃんと要素を全部出力してくれる。

printf()みたいにフォーマットを指定することもできます。

print "%dは%s" % (57,"素数")

%でつなぐのはちょっと特殊ですが、簡単ですね。

 

if文

if文は条件式を( )で囲う必要がありません。

hoge = 10 
if hoge > 5:
hoge *= 2
else:
hoge += 2

関数と同じく、コロンを忘れがちなので注意してください。

条件演算子C言語と同じです。

 

for文

for文はC言語とちょっと雰囲気が違うので混乱しがち。

for i in range(10):
hoge += 1

例によってコロンを忘れがちなので注意です。どうして3回も同じことを言うかというと本当によく忘れるからです。

for i in range(10)はC言語でいうfor(i=0;i<10;i++)と同じ意味です。

range()はいろんな使い方があります。

for i in range(10):     -> for(i=0;i<10;i++)
for i in range(5,10): -> for(i=5;i<10;i++)
for i in range(5,10,2): -> for(i=5;i<10;i+=2)

競プロでrepとかloop系のマクロを使ってる人はすぐ分かると思います。

 

Pythonは便利なので、連想配列とか辞書配列専用の拡張for文的な使い方もできます。

list = ["hoge","fuga","piyo"]
for i in list:
print i

dict = {"hoge":10,"fuga":20,"piyo":30}
for key, value in dict.iteritems():
print (key,value)

この書き方はすごく便利なので、ぜひ覚えておきましょう。

 

これで、雰囲気でPythonが書けると思うので、後は検索しながら書いてください。辞書配列とか連想配列あたりはここで書いてない関数(メソッド)がたくさんあるし、便利なやつも多いので調べながら使ってください。あと文字列周りも奥が深いっぽい。

 

これを読めばABCの文字列以外のやるだけ問くらいは解けるようになるのかな?