Python
初心者
入門
新人プログラマ応援
More than 1 year has passed since last update.

前書き

筆者は、Python初心者です。覚書程度に書いているので、ご了承ください。

間違いがあれば、コメント欄にてご指摘お願いします。

自己紹介

Twitter @konojunya

じゅんじゅんというニックネームで、関西を拠点に活動しているフロントエンドエンジニアです。

HAL大阪の新2回生です👍 (2016.4.24現在)

よくstart up系イベントに行くので、大阪らへんの方は会いましょう!

では、早速。

初めてのPython

順番に進めていきます!

環境

僕はMacなので、元からPythonは入っていましたが、インストールしなおしました。

Pythonには、2系。3系などありますが、僕はv2.7.11なので、2系の書き方になります。

少し3とは、違うようなので、記事のまま動かしたい場合は、Python 2.xをインストールしてください。

Pythonインストール(Mac編)

僕はこのhomebrewを使ったインストール方法でインストールしました。

windows環境へのpythonインストール

pythonの拡張子は、複数ありそれぞれ、意味がありますが今回は.pyだけで学習を進めたいと思います。

なお、一番最初にutf-8で書くぜ!と宣言しているほうがいいので、

index.py
# coding: UTF-8

#insert code...

Pythonはインストールすると、会話的に実行することも可能です。

コマンドラインで、pythonと打つと、そこに式などを書いてすぐに実行結果を試すことができます。

終えるときはexit()とすると、その状態から抜けることができます。

変数

pythonでは、変数を作ることができます。

C言語やJavaのような、intとかstringとか、

javascriptやPHPのように、varも$も必要ありません。

index.py
msg = "Hello World"
print msg # Hello World

このように変数を使うことができます。

printというのは、そのものをコンソール上に展開して表示してくれるものです。

ここで登場したのが、代入演算子です。

ここでは=が登場していますが、数学的なイコールではないことに注意してください。

プログラミングにおいて、=は、「変数名と値を紐付ける、対応付ける」というものです。

では、代入演算子はどのようなものがあるのでしょうか。

index.py
a = b         # a に b を代入する
a += b        # a = a + b に同じ
a -= b        # a = a - b に同じ
a *= b        # a = a * b に同じ
a /= b        # a = a / b に同じ
a %= b        # a = a % b に同じ
a **= b       # a = a ** b に同じ
a //= b       # a = a // b に同じ
a &= b        # a = a & b に同じ
a |= b        # a = a | b に同じ
a ^= b        # a = a ^ b に同じ
a <<= b       # a = a << b に同じ
a >>= b       # a = a >> b に同じ

Pythonでは、単項演算子がありません。

なので、C言語やJavaのi++i+=1に置き換えてください。

簡単な計算もしてみましょう。

index.py
plus = 5 + 3
print plus # 8

このようなときに使う足し算や、引き算などの演算子を、代数演算子と言います。

代数演算子は以下のようなものがあります。

index.py
+a            # 正数
-a            # 負数
a + b         # 加算
a - b         # 減算
a * b         # 乗算
a / b         # 除算
a % b         # a を b で割った余り
a ** b        # a の b 乗
a // b        # 切り捨て除算

その他に、ビット演算子などもあります。

index.py
~a            # ビット反転
a & b         # AND:論理積(aもbも1のビットが1)
a | b         # OR:論理和(aまたはbが1のビットが1)
a ^ b         # XOR:排他的論理和(aまたはbが1のビットが1)
a << b        # b ビット左シフト
a >> b        # b ビット右シフト

などですね。

では、少数を交えた計算をしてみましょう

index.py
plus = 5 + 3.0
print plus # 8.0

今回は同じ5+3なのに、答えが8.0です。

これは、3を3.0と表記することで、少数になるので、

答えもその少数に合わした形になります。

では、日本語をprintしてみましょう

index.py
useless = u"無駄だ。"
print useless # 無駄だ。

日本語を扱うときの注意点で、日本語を扱うときは先頭にuをつけてください。

unicodeのuなんですが、これがないと後々、文字列の長さなどを上手く測れなくなってくるので、絶対につけるようにしてください。

文字列

さて、もう既にわかる人にはわかりますが、文字列です。

"ダブルクォーテーション"'シングルクォーテーション'で囲みます。

代入は上記の通りなんですが、エスケープについて覚えておきたいと思います。

index.py
print "Hello\nworld"

このように、\nをつけると改行してくれます

index.py
print """<html>
\t<body>
\t</body>
</html>"""

ダブルクォーテーション3つかシングルクォーテーション3つで囲って、改行しながら複数行の文字列を打つこともできます。
改行した個所に\nの改行文字があるものとして処理されます。

では、文字列に扱える便利なメソッドを見ていきます。

index.py
s = "abcdefg"
print len(s) # 7
print s.find("c") # 2

このように、文字列には便利なものが複数あります。

len()は、その文字列の長さを返します。findはその文字が何番目にあるかを返すので、

0から始まり、2となります。

文字列 <> 数値

文字列と数値を変えたい時が少々あったりします。

index.py
s = "123"
print s # "123"
print int(s) # 123

数値にするならint文字列にするならstrを使います。

リスト

似たようなデータを一つの変数で管理するリストについて勉強しましょう

リストは、つまり配列です。

index.py
colors = ["red","blue","green"]

print colors[0] # "red"

このように色を管理するcolorsというものを作りました。

中身を取り出すにはcolors[x]として、xには添字というものを入れてあげます。

配列の添字は1からではなく0からなので、colors[0]とすると、先頭の"red"を取得できます。

では、リストが扱える便利なメソッドを幾つか紹介したいと思います。

index.py
colors = ["red","blue","green"]

colors.reverse() 
print colors # ["green","blue","red"]

colors.sort()
print colors # ["blue", "green", "red"]

このように、ソートや逆順などはメソッドを使って簡単にできました!

タプル

タプルも配列ですが、リストとの大きな差は、後から変更できないという点です。

タプルは、定数の配列と思えばいいと思います。

定義の仕方ですが、

index.py
tp = ("kono","junya")

のように、()で表現しますが、

(4/26追記)

本来タプルは、

index.py
tp = "kono","junya"

とも、記述できます。

これは、,によって判別しているからです。

(end)

要素が1個のタプルは、優先演算の括弧と区別するために最後にカンマを指定します。

index.py
tp1 = ("kono",)

タプルは後から変更できないので、読み込みが少し高速になっていたりします。

では、どうしてもリストに変えたい時や、一時的にリストに変えたい時はどうすればいいのでしょうか。

その場合は

index.py
a = list(tp)
print a # ["kono","junya"]

listというもので囲めばいいです。では、あ〜〜やっぱりタプルっすわぁ〜〜となった時にどうするか。

index.py
b = tuple(a)
print b # ("kono","junya")

リストにするならlist、タプルならtupleただそれだけ。

辞書

先ほどのリストに似ていますが、リストの構成上、値を取り出しにくい点がありました。

そこで、先人たちは名前をつけるべく辞書というものを作ってくれました。

まぁ連想配列です。

index.py
#sales = {key:value}
sales = {"junya":100,"kono":40}

このように定義します。

では、辞書で使える便利なメソッドについても勉強していきましょう。

index.py
print sales.keys()     #['junya', 'kono']
print sales.values()   #[100, 40]
print sales.items()    #[('junya', 100), ('kono', 40)]

.keys()で、その辞書の全部のkeyを取得してくれます。

.values()で、全部の値を取得できます。

.items()で、その辞書自体を取得できます。

繰り返し処理

何回も処理を繰り返すためのループ文について、見ていきましょう。

よく使うのはfor文だと思います。

配列の要素分だけループしてくれます。

こんな感じ。

index.py
colors = ["red","blue","yellow"]

for color in colors:
  print color

colorには、colorsから順番に要素が代入されていきます。

では、100回ループするのを作りたい時は、100個の要素の配列を書かないといけないんでしょうか。。

いいえ。そんなことはありません。

rangeというものを使います。

これは、指定分の数字のリストを返してきてくれるものなんですが、いいように使ってやりましょう!

index.py
for i in range(100):
  print i

これで、100ループ間違いなし!!!!

次に、辞書の中身をループさせたいと思います。

書き方はこんな感じ

index.py
user = {"kono":100,"junya":40}

for key,value in user.iteritems():
  print key
for key in user.keys():
  print key

user.iteritemsでは、その辞書の中身がそれぞれkeyとvalueに入っています。

user.keys()を使うとkeyだけの取得もできます。

条件分岐

条件分岐は、ある特定の時にはこちらの処理など、分岐を与えるものです。

index.py
score = 60

if score < 40:
  print "OUT!"
elif score < 65:
  print "SOSO..."
else:
  print "Good!"

このように書けます。

他にも、条件を幾つか組み合わせたい時があると思います。

そんな時は

index.py
if score > 10 and score < 20:
  print "oh..."

のように、andで組み合わせることができます。

C言語やJavaの演算子が && => and,|| => or,! => not

になると思ってください。

なお、pythonでは、

index.py
if 10 < score < 20:
  print "oh..."

のように、書くこともできます!

また真偽のみならば、

index.py
score = 50

print "Good!" if score >= 60 else "NG!"

このように一行でスッキリ書くこともできます。

関数

では、処理をひとまとめにしておける関数について、勉強していきたいと思います。

関数の定義は

index.py
def hello():
  print "Hello"

hello() # Hello

defというキーワードを使って、関数を定義することが可能です。

では、引数についても見ていきましょう

index.py
def hello(name):
  print "hello %s"%name

hello("junya") #hello junya

%sなど見かけないものが出てきましたが、STRINGのsで、

%nameで指定したnameを%sに代入してくれます。

返り値についても見ていきましょう

index.py
def hello(name):
  return "Hello %s"%name

print hello("junya") #Hello junya

簡単ですね。

関数の最後にmapについて勉強したいと思います。

mapとは、リストにその関数を当て込んでいくもので、

index.py
def double(x):
  return x * x

print map(double,[2,5,8]) # [4, 25, 64]

このように便利に使えます。

この関数の部分ですが、この程度ならわざわざdoubleを作るのもめんどくさいので、

mapの中に書き込みたいと思います。

index.py
print map(lambda x:x*x,[2,5,8])

lambdaというキーワードを使い、xという名前をつけて、x*xをリストに当てていきます。

では、最後にクラスについて見ていきたいと思います。

クラス

クラス自体の説明としては、よく設計図などと言われたりします。

そのクラスを自作する時なんですが、

index.py
class User(object):
  def __init__(self,name):
    self.name = name
  def hello(self):
    print "hello %s"%self.name

ざっと書きました。

Userというclassを作り、括弧の中に親クラス(スーパークラス)を指定します。この例ではobjectクラスを親にしています。

コンストラクタは__init__という名前でメソッドを作ればできます。

引数に自分自身を表すselfを入れて、self.name = nameのように初期化します。

helloというメソッドも作ったので、見ていきましょう。

インスタンスする時は

index.py
bob = User("bob")
print bob.name    #bob
bob.hello()       #hello bob

newなどはつけないことに注意してください!

あとはそのままですね。

あとがき

今回はPythonの基礎の基礎の基礎を抑えてみました。

PHPの基礎の基礎の基礎も書いているので、良ければ見てちょ!

間違いなどのご指摘は、コメント欄でお願いします。

また、急な変更をしないといけない場合は、@konojunyaへよろしくお願いします!

次回はたぶんpythonを使ったTwitterAPIとかしてると思いますので、また見てください!

See you!