LoginSignup
10
17

More than 5 years have passed since last update.

Python入門

Last updated at Posted at 2016-07-13

はじめに

ドットインストールのPython入門やってみたのでその勉強記録です!

環境

  • Python 2.6.6
  • CentOS6.7

概要

  • Pythonの基本的なお作法
  • 変数とデータ型
  • 数値
  • 文字列
  • 文字列操作の命令
  • 数値と文字列の相互変換
  • リスト
  • タプル
  • セット
  • 辞書
  • 文字列にデータを組み込む
  • if文で条件分岐
  • ループ処理
  • 関数
  • 変数のスコープとpass
  • オブジェクト
  • クラスと継承
  • モジュールを使ってみる

Pythonの基本的なお作法

coding: UTF-8をつける

付けない場合

hello.py
# コメント
print "hello, world!"
定義しないでコードに日本語とか入れてるとこうなる
$ python hello.py
  File "hello.py", line 1
SyntaxError: Non-ASCII character '\xe3' in file hello.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

付けた場合

hello.py
# coding: UTF-8
# コメント
print "hello, world!"
定義していればコードに日本語とか入れていても大丈夫
$ python hello.py
hello, world!

コーディング規約

その他

  • 文の区切りに;が使えるが非推奨
  • 拡張子は.py
  • コメントは#
  • 字下げ(インデント)が厳格

変数とデータ型

変数

  • データにつけるラベル
  • 大文字小文字を区別する

Pythonで扱えるデータ型

  • 数値
  • 文字列
  • 真偽値
  • リスト(配列)
  • タプル
  • 辞書(連想配列、ハッシュ)

数値

Pythonで扱える数値

  • 整数
  • 小数
  • 複素数

演算子

項目 演算子
足し算 +
引き算 -
掛け算 *
割り算 /
//
余り %
べき乗 **

演算に関するルール

  • 整数と小数の演算をした場合、必ず結果が小数になる
  • 整数同士の割り算は切り捨ての整数となる

文字列

日本語を扱う場合

以下のようにu"こんにちは"のようにしないと
len等の文字列を扱う命令が正しく動作しない場合がある

>>> print len("こんにちは")
15
>>> print len(u"こんにちは")
5

文字列の演算

連結

>>> print "Hello " + "World!"
Hello World!

繰り返し

>>> print "Hello World! " * 3
Hello World! Hello World! Hello World!

文字列のエスケープ

改行、タブ、シングルクォーテーションのエスケープ
>>> print 'hello\n wo\trld\\ it\'s the end'
hello
 wo rld\ it's the end
改行付きでのデータの表示
>>> print """<html lang="ja">
... <body>
... </body>
... </html>"""
<html lang="ja">
<body>
</body>
</html>

文字列操作の命令

文字数のカウント

>>> a = "abcdef"
>>> len(a)
6

文字列の検索

>>> a = "abcdef"
>>> a.find("c")
2

文字列の切り出し

>>> a = "abcdef"
# 2文字目から3文字目までを切り出し
>>> print a[1:3]
bc

# 最初の文字から3文字目までを切り出し
>>> print a[:3]
abc

# 3文字目から最後の文字までを切り出し
>>> print a[2:]
cdef

# 3文字目から最後から2番目の文字までを切り出し
>>> print a[2:-1]
cde

数値と文字列の相互変換

パターン 命令
文字列から整数値 int
文字列から小数値 float
数値から文字列 str
失敗例
>>> age = 20
>>> print "I am  " + age + " years old!"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
成功例
>>> age = 20
>>> print "I am  " + str(age) + " years old!"
I am  20 years old!

リスト

リストとは

  • 他の言語でいうところの配列
  • 文字列に使えるいくつかの命令がそのまま使える

len - 要素の数を調べる

>>> sales = [255, 100, 353, 400]
>>> print len(sales)
4

[] - 切り出しを行う

>>> sales = [255, 100, 353, 400]
>>> print sales[2]
353

in - 存在チェック

>>> sales = [255, 100, 353, 400]
>>> print 100 in sales
True

range - 連番のリストを作成

>>> print range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print range(3, 9)
[3, 4, 5, 6, 7, 8]
>>> print range(3, 10, 2)
[3, 5, 7, 9]

リストで使える便利な命令

sort

  • 小さい順に並び替える
>>> sales = [255, 100, 353, 400]
>>> sales.sort()
>>> print sales
[100, 255, 353, 400]

reverse

  • 要素の順番を逆にする
  • 大きい順に並び替えしたい場合、sortしてからreverseする
>>> sales = [255, 100, 353, 400]
>>> sales.reverse()
>>> print sales
[400, 353, 100, 255]

split

>>> d = "2016/07/15"
>>> print d.split("/")
['2016', '07', '15']

join

>>> a = ["a", "b", "c"]
>>> print "-".join(a)
a-b-c

map

  • リストの各要素に対して関数の処理を適用させる命令
def power(x)
    return x * x
print map(power, [2, 5, 8])

#=> [4, 25, 64]

タプル

  • 基本的にリストと同じだが、要素の変更ができないという特徴がある
  • 最初から変更できないデータだと示すことによって、計算速度を早くしたり、変な間違いが起きないようにする
  • リストで使ったような命令も使える

タプルからリストへの変更

>>> a = (2, 5, 8)
>>> print a
(2, 5, 8)
>>> b = list(a)
>>> print b
[2, 5, 8]

リストからタプルへの変更

>>> b = [2, 5, 8]
>>> c = tuple(b)
>>> print c
(2, 5, 8)

セット

  • 集合型と呼ばれたりする
  • 要素が並んだもので、重複を許さないという特徴がある
>>> a = set([1, 2, 3, 4])
>>> print a
set([1, 2, 3, 4])
重複箇所は表示されない
>>> a = set([1, 2, 3, 4, 2, 3])
>>> print a
set([1, 2, 3, 4])

集合の演算

差集合

aにあってbにないもの
>>> a = set([1, 2, 3, 4])
>>> b = set([3, 4, 5])
>>> print a - b
set([1, 2])

和集合

aにもbにもあるもの
>>> a = set([1, 2, 3, 4])
>>> b = set([3, 4, 5])
>>> print a | b
set([1, 2, 3, 4, 5])

積集合

aとbで重複するもの
>>> a = set([1, 2, 3, 4])
>>> b = set([3, 4, 5])
>>> print a & b
set([3, 4])

どちらにしかないもの

>>> a = set([1, 2, 3, 4])
>>> b = set([3, 4, 5])
>>> print a ^ b
set([1, 2, 5])

辞書

  • 他の言語で言うところの連想配列やハッシュのようなもの
  • 基本はkeyvalueがペアになったもの

基本的な使い方

>>> sales = {"hoge":200, "hogehoge":300, "hogeo":500}
>>> print sales
{'hogeo': 500, 'hogehoge': 300, 'hoge': 200}
>>> sales = {"hoge":200, "hogehoge":300, "hogeo":500}
>>> sales["hogehoge"] = 800
>>> print sales
{'hogeo': 500, 'hogehoge': 800, 'hoge': 200}

キーの存在確認

>>> sales = {"hoge":200, "hogehoge":300, "hogeo":500}
>>> print "hoge" in sales
True

キーの一覧を確認

>>> sales = {"hoge":200, "hogehoge":300, "hogeo":500}
>>> print sales.keys()
['hogeo', 'hogehoge', 'hoge']

値の一覧を確認

>>> sales = {"hoge":200, "hogehoge":300, "hogeo":500}
>>> print sales.values()
[500, 800, 200]

両方の一覧を確認

>>> sales = {"hoge":200, "hogehoge":300, "hogeo":500}
>>> print sales.items()
[('hogeo', 500), ('hogehoge', 800), ('hoge', 200)]

文字列にデータを組み込む

項目 英語 意味
%d decimal 整数
%f float 小数
%s string 文字列
>>> a = 10
>>> b = 1.234234
>>> c = "hoge"
>>> d = {"hoge":200, "hogehoge":500}
>>> print "age: %d" % a
age: 10
>>> print "price: %f" % b
price: 1.234234
>>> print "name: %s" % c
name: hoge
10桁分表示させる
>>> print "age: %10d" % a
age:         10
余った桁を0で埋める
>>> print "age: %010d" % a
age: 0000000010
小数点2桁まで表示させる
>>> print "price: %.2f" % b
price: 1.23
辞書型の場合特定のキーの値を取り出せる
>>> print "sales: %(hoge)d" % d
sales: 200
複数の値を同時に指定
>>> print "%d and %f" % (a, b)
10 and 1.234234

if文で条件分岐

基本的な条件分岐

score = 70
if score > 60:
    print "OK!"
#=> OK!
score = 70
if score > 60 and score < 80:
    print "OK!"
#=> OK!
このようにも書ける
score = 70
if 60 < score < 80:
    print "OK!"
#=> OK!

else / elif による条件分岐

score = 45
if score > 60:
    print "ok!"
elif score > 40:
    print "soso..."
else:
    print "ng!"
#=> soso...
このようにも書ける
score = 45
print "OK!" if socre > 60 else "NG!"
#=> NG!

ループ処理

forでループ

sales = [13, 3423, 31, 234]
sum = 0
for sale in sales:
    sum += sale
print sum
#=> 3701
このようにも書ける
sales = [13, 3423, 31, 234]
sum = 0
for sale in sales:
    sum += sale
else:
    print sum
#=> 3701
for i in range(10):
    print i
#=> 0..9までが表示される
continue
for i in range(10):
    if i == 3:
        continue
    print i
#=> 3を除いた0..9までが表示される
break
for i in range(10):
    if i == 3:
        break
    print i
#=> 0..2までが表示される

辞書でループ

  • iteriterationの略
辞書アイテムを表示させる
users = {"hoge":200, "hogehoge":300, "hogeo":500}
for key, value in users.iteritems():
    print "key: %s value: %d" % (key, value)
#=> key: hogeo value: 500
#=> key: hogehoge value: 300
#=> key: hoge value: 200
辞書のキーを表示させる
users = {"hoge":200, "hogehoge":300, "hogeo":500}
for key in users.iterkeys():
    print key
#=> hogeo
#=> hogehoge
#=> hoge
辞書の値を表示させる
users = {"hoge":200, "hogehoge":300, "hogeo":500}
for value in users.itervalues():
    print value
#=> 500
#=> 300
#=> 200

whileでループ

n = 0
while n < 5:
    print n
    n += 1
else:
    print "end"
#=> 0
#=> 1
#=> 2
#=> 3
#=> 4
#=> 5
#=> end
endが表示されない
n = 0
while n < 5:
    if n == 3
        break
    print n
    n += 1
else:
    print "end"
#=> 0
#=> 1
#=> 2

関数

基本的な関数

基本形
def hello():
    print "hello"
hello()
#=> hello
引数を使う
def hello(name):
    print "hello %s" % name
hello("tom")
#=> hello tom
引数を使う
def hello(name):
    print "hello %s" % name
hello("tom")
hello("bob")
#=> hello tom
#=> hello bob
引数を2つ使う
def hello(name, num):
    print "hello %s! " % name * num
hello("tom", 2)
hello("bob", 3)
#=> hello tom! hello tom!
#=> hello bob! hello bob! hello bob!
引数にデフォルト値を持たせる
def hello(name, num = 3):
    print "hello %s! " % name * num
hello("tom", 2)
hello("bob")
# このようにも書ける
hello(num = 2, name = "serve")

#=> hello tom! hello tom!
#=> hello bob! hello bob! hello bob!
#=> hello steve! hello steve! hello steve!
返り値を持たせる
def hello(name, num = 3):
    return "hello %s! " % name * num
s = hello("bob")
print s

#=> hello bob! hello bob! hello bob!

無名関数(lambda)

def power(x):
    return x * x
print map(power, [2, 5, 8])

#=> [4, 25, 64]
このように書ける
print map(lamdba x:x * x, [2, 5, 8])

#=> [4, 25, 64]

変数のスコープとpass

  • 関数内で定義したnameは関数の外で定義したnameと別物
name = "hoge"
def hello():
    name = "hogehoge"
print name

#=> hoge
  • hello2()という関数を定義して中身を後で書きた良い場合、コロンのあと字下げしてpassと書いておくとなにも処理しないという意味になる
def hello2()
    pass

オブジェクト

用語説明

用語 説明
オブジェクト 変数と関数をまとめたもの
クラス オブジェクトの設計図
インスタンス クラスを実体化したもの

クラスの作成

class User(object):
    def __init__(self, name):
        self.name = name
    def greet(self):
        print "my name is %s!" % self.name

bob = User("Bob")
tom = User("Tom")
print bob.name
bob.greet()
tom.greet()

#=> Bob
#=> my name is Bob!
#=> my name is Tom!

クラスと継承

  • クラスの性質はそのままに、すこし違う性質のオブジェクトを作りたい場合に継承を行う
class User(object):
    def __init__(self, name):
        self.name = name
    def greet(self):
        print "my name is %s!" % self.name
class SuperUser(User)
    def shout(self)
        print "%s is SUPER!"

bob = User("Bob")
tom = SuperUser("Tom")
tom.greet()
tom.shout()

#=> my name is Tom!
#=> Tom is SUPER!

モジュールを使ってみる

  • モジュールとはPythonが予め用意している便利な命令が詰まったもの
  • 公式サイトのモジュール一覧
  • 複数のモジュールを呼び出したい場合にはカンマ区切りでOK
mathモジュール
import math
print math.ceil(5.2)
#=> 6.0
randomモジュール
import random
for i in range(5):
    print random.random()
#=> 0.761598550441
#=> 0.180484460723
#=> 0.494892311516
#=> 0.672065106987
#=> 0.561810023764
モジュール内の一部だけ呼び出す場合
from datetime import date
print date.today()
2016-07-13
10
17
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
17