ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。エンジニアの日々の開発などの記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

PHPerが初めてPythonの基本文法を雑に触った時の実装メモ。

普段はPHPを書いたり、JavaScript系を書いたり、たまにGolangを書いたり、極稀にUnityでC#を書いたりしているのですが、Pythonは書いたことがないのです。

そこで、今回は、Pythonのことをちょっとだけ知ろうと思い、入門部分を試してみたいと思います。

実行環境と実行の仕方

実行環境はmacです。

macのため、2系と3系のバージョンが使えるようになっています。

$ python --version
Python 2.7.16

$ python2 --version
Python 2.7.16

$ python3 --version
Python 3.9.10

今回は3.9.10で実行していきたいと思います。

変数と出力

変数の代入と出力

print()を使うと変数の中身を出力できるらしい。

a = 1
print(a)

実行結果

1

複数変数に同時に代入

カンマで区切るだけ。a, b = (1, 2)の方が見やすそう。

a, b = 1, 2
print(a)
print(b)

実行結果

1
2

変数の型の確認

type()を利用することで型を調べることができる。

a = 1
print(type(a))

b = 1.2
print(type(b))

実行結果

<type 'int'>
<type 'float'>

キャスト

int()やfloat()などでキャストできる。

a = 1.2
print(int(a))


b = 2
print(float(b))

実行結果

1
2.0

ブール値

ブール値はTrue/False。

a = True
print(a)
print(type(a))

実行結果

True
<type 'bool'>

また、大文字から始めないとエラーになってしまう。

a = true

実行結果

Traceback (most recent call last):
  File "/Users/pnkts/python/test.py", line 1, in <module>
    a = true
NameError: name 'true' is not defined

文字列の扱い

文字列はシングルクォーテーション(')または、ダブルクオーテーション(")で括る。

print('test')
print("test")

実行結果

test
test

文字列を変数に格納する

a = 'test'
print(a)
print(type(a))

実行結果

test
<class 'str'>

数字と文字列を結合してみる

単純に+してもエラーになるだけ。

a = 'test'
b = 1
print(a + b)

実行結果

Traceback (most recent call last):
  File "/Users/pnkts/python/test.py", line 3, in <module>
    print(a + b)
TypeError: can only concatenate str (not "int") to str

文字列にキャストしてから結合させる(型をあわせる)と大丈夫そう

a = 'test'
b = 1
print(a + str(b))

実行結果

test1

シングルクォーテーションのエスケープ

文字列内でシングルクォーテーションを利用する時のエスケープ方法。バックスラッシュ(\)でエスケープする。

a = 'a\'b'
print(a)

実行結果

a'b

算術演算子

四則演算とか。

print(1+2)
print(3-1)
print(2*4)
print(10/5)

実行結果

3
2
8
2.0

おや、割り算だけ小数っぽい?

print(type(1+2))
print(type(3-1))
print(type(2*4))
print(type(10/5))

実行結果

<class 'int'>
<class 'int'>
<class 'int'>
<class 'float'>

割り算だけfloatになるようです。

もちろん、剰余演算?余りも求められる

print(10%3)

実行結果

1

累乗の計算。アスタリスクを2つ並べる(**

print(2**5)

実行結果

32

変数に入れることもできる

a = 2*5
print(a)

実行結果

10

比較演算子

==><を使ってみる。否定は!をつける。

a = 2**3
print(a)
print(a==4)
print(a==8)
print(a!=8)

実行結果

8
False
True
False

大小比較。

a = 2**3
print(a)
print(a>4)
print(a>8)
print(a>16)

実行結果

8
True
False
False

含む比較をしてみる。

a = 2**3
print(a)
print(a>=4)
print(a>=8)
print(a>=16)

実行結果

8
True
True
False

よくある言語と同じ感じですね。

論理演算子

よくある&&||の書き方はpythonだとandorを使う。

print(True and False)
print(True or False)
print(not True)

実行結果

False
True
False

&&などを利用するとSyntaxError: invalid syntaxになる。

コメントアウト

大事なコメントの書き方です

# コメントです

コメントは#を使うっぽい。

'''
複数行コメントは
こう書く
'''

"""
こういう書き方でも
複数コメントが
できる
"""

複数行のコメントはシングルクォーテーションかダブルクオーテーションを3つ並べるとのこと。

式の途中で改行する

式の途中などで改行したい場合の書き方。多くの言語だと何もせずにそのまま改行してもエラーにならないが、pythonだとバックスラッシュ(\)を入れてあげないとだめ。

a = 1 + 2 + 3

a = 1 + 2
    + 3  # IndentationError: unexpected indent エラーになる

a = 1 + 2\
    + 3 # バックスラッシュを入れることで改行してもエラーにならない

文字列から文字を取り出す

文字列からN文字目の文字を取得する。

print("Hello"[1])

実行結果

e

メソッド(関数)

最初の行は、defを頭に付けて、メソッド名を書き、コロン(:)をつける。

インデントを一つ落としてメソッドの内容を書く。

def sum(x, y):
    return x + y

print(sum(1, 2))

実行結果

3

メソッドのキーワード引数を利用した呼び出し

引数名を明示的に指定する方法もある。

def sub(x, y):
    return x-y
print(sub(1, 2))
print(sub(2, 1))
print(sub(y=1, x=2))

実行結果

-1
1
1

if文、else文、elif文

メソッドのように、コロンをつけるのとインデントを下げる必要がある。

a = 3
b = 5
if a == b:
    print("=")
if a != b:
    print("!")

実行結果

!

ifを使ったらelseも使いたいですよね。

a = 3
b = 5
if a == b:
    print("=")
else:
    print("!")

実行結果

!

ここまで書いているとすんなり理解できますね。

他の言語でいうカッコがない代わりに始まりのカッコがコロンに置き換わる感じですかね。

else if的なものも書きたくなりますね。

a = 3
b = 5
if a == b:
    print("=")
elif a < b :
    print("<")
else:
    print(">")

実行結果

<

elseifではなくelifなんですね。

リスト

他の言語でいう配列。

a = [1, 2, 3]
print(a)

実行結果

[1, 2, 3]

インデックスの指定

インデックスを指定して値を取得する

a = [1, 2, 3]
print(a[1])

実行結果

2

インデックスを後ろから指定する

マイナスを指定することで、後ろからのインデックスも指定できる。

a = [1, 2, 3]
print(a[-1])

実行結果

3

要素を削除

delを使うことで削除できる。

a = [1, 2, 3]
del a[1]
print(a)

実行結果

[1, 3]

要素を追加

appendを使用する。

a = [1, 2, 3]
a.append(4)
print(a)

実行結果

[1, 2, 3, 4]

まとめて使いする場合はextend()を利用する。

a = [1, 2, 3]
a.extend([4, 5])
print(a)

実行結果

[1, 2, 3, 4, 5]

リストの長さを取得

a = [1, 2, 3]
print(len(a))

実行結果

3

スライス

インデックスを指定するときにコロン(:)を付けて指定することで、配列を分割することができる。

a = [1, 2, 3, 4, 5]
print(a[1:3])

実行結果

[2, 3]

コロンの左側を省略すると、N個スライスすることができる。

a = [1, 2, 3, 4, 5]
print(a[:3])

実行結果

[1, 2, 3]

コロンの右側を省略すると、N個スキップして分割することができる。

a = [1, 2, 3, 4, 5]
print(a[2:])

実行結果

[3, 4, 5]

リストから検索する

リストから指定したものが何番目に入っているかを検索してくれる。インデックスが返ってくる。

a = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']
print(a.index('wed'))

実行結果

3

ソートする

sort()を利用するが、ソートした結果を返すわけではなく、破壊的なメソッドで、そのリストに対してソートさせてしまうということ。

a = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']
a.sort()
print(a)
a.sort(reverse=True)
print(a)

実行結果

['fri', 'mon', 'sat', 'sun', 'thu', 'tue', 'wed']
['wed', 'tue', 'thu', 'sun', 'sat', 'mon', 'fri']

逆順にする場合は、reverseの引数をTrueにしてあげる。

タプル

定数のリストのようなもの。

a = 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'
# a = ('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat') このようにカッコを付けても良い
print(a)
print(type(a))

実行結果

('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat')
<class 'tuple'>

カッコが鉤括弧じゃなく、丸括弧になっている。

辞書

連想配列みたいなもの。

a = {'sun': 'red', 'fri': 'black', 'sat': 'blue'}
print(a['sun'])

実行結果

red

追加も直感的にできる。

a = {'sun': 'red', 'fri': 'black', 'sat': 'blue'}
a['wed'] = 'black'
print(a)

実行結果

{'sun': 'red', 'fri': 'black', 'sat': 'blue', 'wed': 'black'}

get()メソッドで取得もできる。

a = {'sun': 'red', 'fri': 'black', 'sat': 'blue'}
print(a.get('sun'))
print(a.get('wed'))

実行結果

red
None

存在しない場合はエラーにならずNoneが返る。

ちなみに型を調べてみると、print(type(a.get('wed')))<class 'NoneType'>となり、NoneTypeというものがあることがわかる。

for文

forEachみたいな感覚でしょうか。リストに対してループ処理をさせる。

a = [1, 2, 3, 4, 5]
for b in a:
    print(b)

実行結果

1
2
3
4
5

while文

条件がTrueの間はループ処理してくれる。

a = 0
while a < 10:
    print(a)
    a += 1

実行結果

0
1
2
3
4
5
6
7
8
9

rangeを使ってリストを作成する

range()を利用するとリストようなものが簡単に作れる。forと組み合わせて使う。

for n in range(10, 20, 3):
    print(n)

実行結果

10
13
16
19

引数の数で意味が異なる。

print(range(1))
print(range(1, 2))
print(range(1, 2, 3))

実行結果

range(0, 1)
range(1, 2)
range(1, 2, 3)

なので、簡単にN回ループ処理を実現できる。

for n in range(10):
    print(n)

実行結果

0
1
2
3
4
5
6
7
8
9

これを利用すると、PHPでいうforeachみたいなものもできそう。

a = [3, 4, 5]
for n in range(len(a)):
    print(a[n])

実行結果

3
4
5

辞書のfor

辞書に対してforを実行するとどうなるのか。

a = {'sun': 'red', 'fri': 'black', 'sat': 'blue'}
for n in a:
    print(n)

実行結果

sun
fri
sat

すなわち、valueではなくkeyが取得できるということですね。

その他の組み込み関数

最大値・最小値

最大値や最小値を返す組み込み関数。

print(max(1, 2, 3))
print(min(1, 2, 3))

実行結果

3
1

絶対値

absもpythonに用意されている。

print(abs(1))
print(abs(-1))

実行結果

1
1

合計値

print(sum([1, 2, 3]))

実行結果

6

小数点以下を丸める

print(round(10/3, 2))

実行結果

3.33

累乗

print(pow(3, 2))

実行結果

9

3**2と同じですね。

文字列の長さ

文字列の長さを取得する場合はlen()というメソッドを利用する。

print(len('Hello'))

実行結果

5

モジュールの利用

モジュールをインポートするときはfromを書く。使いたいメソッドをimportする。

from math import sqrt
print(sqrt(2))

実行結果

1.4142135623730951

mathモジュールのすべてを使いたい場合は*を利用する。

from math import *
print(sqrt(2))

さいごに

これだけじゃ不十分かもしれないですが、チュートリアルなところです。初心者にしてはいろいろ触れたんじゃないでしょうか。

Pythonは使いやすそうな言語なので、これからもちょこちょこと使ってみようかなと思いました!

お問い合わせプライバシーポリシー制作物