SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

レトロ風ゲームを作って学ぶPython入門

【作って学ぶPython】基本の文法を学んでコードを読み解けるようになろう!

レトロ風ゲームを作って学ぶPython入門 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

複数の値を格納する型

 複数の値を格納する型として、リストとタプル、辞書を紹介します。他にもありますが、まずはこの3つを押さえておきたいです。

 複数の値を格納する型は、1つの値の中に、複数の値を保持します。これらの型は、値のグループのようなものです。大量のデータを効率よくあつかうときに、こうした型が活用されます。

複数の値を格納する型
種類 説明
リスト list 0からはじまる連番で値を管理
タプル tuple リストに似ているが、定義したあとに値の変更ができない
辞書 dict キーと値のペアで値を管理

 それではリストから見ていきましょう。

リスト

 Pythonのリストは、他のプログラミング言語の配列に相当するものです。リストは複数の値をまとめてあつかいます。各値は0から始まる連番で保持されます。リスト内の各値は要素と呼びます。最初の要素は要素0、次の要素は要素1です。

 リストは[ ]で作り、各要素はカンマ区切りで並べます。リストの長さはlen()関数で得ます。

リスト
data = [10, 20, 30]
print(data)         # 「[10, 20, 30]」と表示
print(len(data))    # 「3」と表示
リスト
リスト

 要素の値を得るときは[ ]を使います。[ ]を使うことで、特定の位置に値を代入することもできます。

要素の操作
data = [10, 20, 30, 40, 50]
print(data[0])      # 「10」と表示
print(data[1])      # 「20」と表示

data[1] = 22        # 要素1に22を代入
print(data[1])      # 「22」と表示

 要素の位置にマイナスの数値を指定したときは、末尾から数えます。

マイナスの指定
data = [10, 20, 30, 40, 50]
print(data[-1])     # 「50」と表示
print(data[-2])     # 「40」と表示

 要素を指定するときに、範囲外を指定するとエラーが出るので注意してください。たとえば要素数が5のときに、5以上の位置を指定するとエラーが出ます。要素数が5のときは要素の番号は0〜4です。

範囲外の指定
data = [10, 20, 30, 40, 50]
print(data[5])      # 「IndexError: list index out of range」と表示して終了

 リストのスライス(一部の切り抜き)を得るときも[ ]を使います。たとえば[1:3]と書けば、要素1から要素3の手前まで、つまり要素1、要素2という意味になります。

スライス
data = [10, 20, 30, 40, 50]
data2 = data[1:3]   # 要素1から、要素3の手前までスライス
print(data2)        # 「[20, 30]」と表示

 リストには、append()関数で末尾に要素を追加したり、+=で要素をまとめて追加したりできます。

要素の追加
data = [10, 20, 30]

data.append(40)
print(data)     # 「[10, 20, 30, 40]」と表示

data += [50, 60]
print(data)     # 「[10, 20, 30, 40, 50, 60]」と表示

 リストの各要素の処理はfor文でおこなえます。for文は、for 変数 in リスト:と書きます。for文のあとの処理は、インデントしてグループ化します。

 プログラムと出力の例です。

各要素の処理
animals = ["cat", "dog", "bear"]
for name in animals:
    print(name)
出力
cat
dog
bear

 要素の番号も得たいときはenumerate()関数を組み合わせます。for 番号用の変数, 値用の変数 in enumerate(リスト):と書きます。

 プログラムと出力の例です。

要素の番号も得る
animals = ["cat", "dog", "bear"]
for i, name in enumerate(animals):
    print(i, name)
出力
0 cat
1 dog
2 bear

タプル

 タプル(tuple)はリストの仲間です。リストと違い、定義したあとに、要素の個数や値を変更できません。( )で作り、要素をカンマ区切りで並べます。値が変更できないこと以外は、リストと同じようにあつかえます。

タプル
data = (10, 20, 30)
print(data)         # 「[10, 20, 30]」と表示
print(len(data))    # 「3」と表示
print(data[0])      # 「10」と表示
print(data[0:2])    # 「(10, 20)」と表示

 for文でも同じように使えます。

各要素の処理
data = (10, 20, 30)
for num in data:
    print(num)

 タプルは、list()関数でリストに変換できます。

リストに変換
data = (10, 20, 30)
print(data)       # 「(10, 20, 30)」と表示
print(list(data)) # 「[10, 20, 30]」と表示

 タプルは、,区切りだけでも作れます。また、左辺に,区切りの変数を書くことで、各要素の値を受け取れます。丸括弧を付けても、付けなくてもよいです。この分割受け取りの書き方は、リストでもおこなえます。

丸括弧の省略
data = 10, 20, 30    # タプル 括弧なし
print(data)         # 「(10, 20, 30)」と表示

(a, b, c) = data    # タプル 変数で受け取り
print(a, b, c)      # 「10 20 30」と表示

a, b, c = data      # タプル 変数で受け取り 括弧なし
print(a, b, c)      # 「10 20 30」と表示

辞書

 辞書は、他のプログラミング言語の連想配列に相当するものです。複数の値をまとめてあつかう型です。各要素を、キーと値のペアで表します。

 辞書は{ }で作り、要素は,で区切ります。各要素は、キーと値を"key" : "value"のように:で分けて書きます。辞書の要素数はlen()関数で得ます。

 各要素は、辞書のあとに[ ]を書き、その中にキーを書くことで読み書きできます。

辞書
data = {"name": "tama", "age": 10}
print(data)         # 「{'name': 'tama', 'age': 10}」と表示
print(len(data))    # 「2」と表示

print(data["name"]) # 「tama」と表示
data["age"] = 11    # ageの値を書き換え
print(data["age"])  # 「11」と表示
辞書
辞書

 辞書をfor文で処理するときは、辞書のitems()関数を使うとよいです。キーと値を、それぞれ変数で受け取れます。

 プログラムと出力の例を示します。

各要素の処理
data = {"name": "tama", "age": 10}
for k, v in data.items():
    print(f"key:{k}, value: {v}")
出力
key:name, value: tama
key:age, value: 10

条件分岐

 プログラムの処理では、値によって処理を分岐させることが多いです。そうした機能を実現するのが、条件分岐という仕組みです。

 条件分岐を使うと、値がaのときはAの処理を……、bのときはBの処理を……、といった感じで処理の内容を分けることができます。Pythonではif文で条件分岐を実現できます。

条件分岐
条件分岐

if文

 if 条件式:と書き、条件式Trueになるなら、後続のインデントしたグループ内の処理をおこないます。

 プログラムと出力の例を示します。1つ目のif文では、条件式がTrueなので後続のグループ内の処理がおこなわれます。2つ目のif文では、条件式がFalseなので処理はおこなわれません。

if文
if True:
    print("処理1")
    print("処理2")

if False:
    print("処理3")
    print("処理4")
出力
処理1
処理2

 if文は、1行で書くこともできます。処理が短いときは、1行で書くこともあります。プログラムと出力の例を示します。

1行で書く
if True: print("処理1")

if False: print("処理2")
出力
処理1

比較演算子

 if文の条件式には、ふつうはTrueFalseの値を書くのではなく式を書きます。変数の値によって処理を分岐させるためです。こうした判定をおこなうのが比較演算子です。

 ある変数の値が、指定の値と同じなのか、以上なのか、以下なのか。そうした比較をおこなう演算子を示します。

比較演算子
式の例 説明
x == y xとyが等しいならTrue、違うならFalse
x != y xとyが等しいならTrue、違うならFalse
x > y xがyよりも大きいならTrue、違うならFalse
x < y xがyよりも小さいならTrue、違うならFalse
x >= y xがyと等しいか大きいならTrue、違うならFalse
x <= y xがyと等しいか小さいならTrue、違うならFalse
x in y xという要素がyに存在するならTrue、違うならFalse
x not in y xという要素がyに存在しないならTrue、違うならFalse

 たとえば、「2以下」といった条件式は、<=を使い、次のように書けます。

比較演算子
data = [0, 1, 2, 3, 4]

for num in data:
    if num <= 2:
        print(num, "OK")
出力
0 OK
1 OK
2 OK

if~else文

 if〜elseと書くことで、条件式がFalseのときの処理も書けます。

if~else文
data = [0, 1, 2, 3, 4]

for num in data:
    if num <= 2:
        print(num, "OK")
    else:
        print(num, "範囲外")
出力
0 OK
1 OK
2 OK
3 範囲外
4 範囲外

if~elif~else文

 if〜elif~elseと書くことで、細かな分岐もできます。elifは複数書くこともできます。

if~elif~else文
data = [0, 1, 2, 3, 4]

for num in data:
    if num <= 1:
        print(num, "1以下")
    elif num <= 3:
        print(num, "3以下")
    else:
        print(num, "範囲外")
出力
0 1以下
1 1以下
2 3以下
3 3以下
4 範囲外

論理演算子

 if文の条件式には、さらに複雑な式を書くこともあります。「0以上、3未満」のように、複数の条件を指定するような場合です。そうした機能を実現してくれるのが論理演算子です。

論理演算子
式の例 意味 説明
x and y 論理積 xとyの両方がTrueならTrue、違うならFalse
x or y 論理和 xとyの両方、あるいはいずれかがTrueならTrue、違うならFalse
not x 否定 xがTrueならFalse、xがFalseならTrue

 たとえば、「0以上、3未満」といった条件式は、andを使い、次のように書けます。

論理演算子
data = [-1, 0, 1, 2, 3, 4]

for num in data:
    if num >= 0 and num < 3:
        print(num, "OK")
    else:
        print(num, "範囲外")
出力
-1 範囲外
0 OK
1 OK
2 OK
3 範囲外
4 範囲外

次のページ
繰り返し処理

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
レトロ風ゲームを作って学ぶPython入門連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19426 2024/05/13 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング