tairadate_highschool_programming_lesson_2025

day2 Pythonの基礎② / Pyxel入門

Pythonの基礎文法②: 制御構文

プログラムは基本的に上から下に順番に実行されるけど、「もし〇〇だったら、この処理をする」「この処理を10回繰り返す」のように、処理の流れ(制御)を変えることができます。これを制御構文といいます。

1. 制御構文①: <if> もし〜なら (条件分岐)

例えば、エアコンの新機能を作るとする。室内を最適な温度に保ちたいわけだけど、いちいち温度設定をしたり、冷房と暖房を切り替えたりするがめんどくさい!ていう悩みを解決してみよう。

ここにif文のコード例を挿入

2. 制御構文②: <for> 回数指定の繰り返し

コードを書くときのとても重要な考え方として、「コードをわかりやすく、短くまとめる」というのがある。 真夏の体育館での校長先生の話を考えてみよう。5分ですむ話を、1時間も2時間もされたら、たまったもんじゃないよね。でも大体校長先生の話とかって「挨拶をしようね」「礼儀正しくしようね」ってだけの内容無事が多い(気がするw) プログラミングをしていくうえで、「おんなじことを何回も繰り返し実行したい」っていうシーンは結構ある。例えば

1つ目のLINEの例を考えてみよう。

たとえばクラスが100人いたときに、コードはこんな感じ(実際にはlineを送る処理はもっと複雑だけど)

print("LINEを送信")
print("LINEを送信")
print("LINEを送信")
print("LINEを送信")
print("LINEを送信")
print("LINEを送信")
print("LINEを送信")
print("LINEを送信")
・・・
# これを100人分繰り返す

こんな感じで、回数が決まっている(今回は100回)繰り返しのは、pythonではこう書きます。

for i in range(繰り返し回数):
    繰り返し実行したい処理

これをもとに、さっきのLINE送信プログラムを書いてみると

for i in range(100):
    print("LINEを送信")
 参考:i とか range とかって何なのよ

このコードを動かしてみよう

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

実行結果↓

0
1
2
3
...(省略)
10

range(10)とすると、0から9までの数字データのかたまり(配列といいます)が入って、for文といっしょに使うことで、処理中にその塊に入っているデータに順番にアクセスしていく感じ。0から9だから、全部で10回の繰り返しになる、てこと。iという文字に、繰り返しごとにデータが順番に入っていく感じ。ここの文字は別にiである必要はなくて、自由に名前をつけられる。 配列には他にも「リスト」などの種類があって、こっちは数字だけじゃなくて文字も扱える。 配列を使った繰り返しの例はこんな感じ

teacher_list = ["リッキー", "オッキー", "ガッキー"]
for teacher in teacher_list:
    print(i + "かっこいい")

実行結果↓

リッキーかっこいい
オッキーかっこいい
ガッキーかっこいい

3. 制御構文③: <while> 条件指定の繰り返し

for文は回数指定の繰り返しだけど、例えばこんなとき、何回繰り返すことになるかわかんないよね ・気温が30度以上である限りスプリンクラーを巻き続ける ・「おわり」と指示するまで仕事をやめないロボット ・「君がッ 泣くまで 殴るのをやめないッ」 これらは回数じゃなくて条件によって繰り返すかどうかを制御する必要がある。 while文の繰り返しの書き方はこんな感じ

while 繰り返すときの条件:
    繰り返したい処理

試しに、「君がッ 泣くまで 殴るのをやめないッ」を、pythonで実装してみよう。 inputという特殊な関数を使って、ユーザーが文字を入力して、「ぴえん」という文字を入力したときだけ処理が終了して許してもらえるというプログラム。

dio = ""
while dio != "ぴえん":
    print("オラ!")
    dio = input("dio:")
print("ゆるしてやろう")

ここでもインデントが重要で、インデントされている2つの処理が繰り返し実行される処理、インデントされていない print(“ゆるしてやろう”) の部分は、繰り返し=while文が終了したあとに実行されることがわかる。

<details markdown=”1>

参考①True(トゥルー)とFalse(フォルス)

試しにこのコードを実行してみよう。

ricky = "かっこいい"
print(ricky == "かっこいい")

実行結果

True

True : 正しい pythonも認めざるを得ないかっこよさ。 冗談はさておき、これは ricky という変数と "かっこいい" という文字データは同じ という条件が「正しい」ので、Trueという結果が帰ってきている感じ。 逆に

ricky = "かっこいい"
print(ricky == "ブサイク")

コレを実行してみると

False

という結果がでます。(False=フォルス:間違い)

今まで出てきたif文やwhile文は、「条件」が「TrueかFalseか」を判定しているわけ。例えば

if ricky == "イケメン":
    print("わかるー")

というif文は、ricky == "イケメンという条件がTrueのときに「わかるー」とprintする、という感じになる。ちなみに、パソコン内部的にはTrueは1、Falseは0として扱われるので、最初に出てきた「パソコンは0と1だけでデータを処理している」っていう話とつながってきたりする。試しにこのコードを実行すると、「おんなじ!」と出力される。

if (True == 1):
    print("おんなじ!")

</details>

参考②無限ループ

ゲームが起動中にずーっと同じ処理を繰り返したい場合などによく使われる手法で、無限ループというのがある。たとえばこんなコード(実行する場合は、必ず近くに詳しい人がいるときにやってください。やりすぎるとパソコンに余計な負担をかけてしまうことがあります。)

while True:
    print("リッキーかっこいい")

無限にリッキーかっこいいとprintするという非常に正しいコードになってる。 ループを抜けたい場合はCtrl + C で終了できる。

関数: 処理をまとめよう

プログラムを書いていくうえで、おんなじ処理を何回も実行したいときがあって、その一つの解決方法がforやwhile何だけど、もう一つのやり方がこの関数。 関数の基本の考え方は、何度も使いそうな処理を一箇所にまとめておいて、使いたいときに処理を呼び出すというやり方。 以下のコードは、for文などの繰り返しと違うところは、回数や条件を指定できない代わりに、引数というシステムを使うと、同じ処理を繰り返すだけではなく、同じ「ような」処理を繰り返し行うことができる。書き方の説明の前に、実際に関数をつかって書かれたコードを見てみよう、 以下の2つのコードは、どちらも正方形の面積を求めるプログラム何だけど、違いを見てみよう。


💪 練習問題: CLIアプリを作ろう

<練習問題④> 挨拶bot①

ユーザーが入力した文字に対して、「◯◯さん、おはよう!」という文字を返してprintする関数を作ってみよう。

解答例
name = input("お名前は?:")
def goodmorning(name):
    return name + "さん、おはよう!"

goodmorning(name)

<練習問題⑤> 挨拶bot②

挨拶bot①を改良して、時間によって挨拶の内容を変えるプログラムを作ってみよう
<ヒント①> input関数を使って時間を入力して取得できるようにしても、こんなかんじのエラーがでる。input関数を使って返ってくるデータは常に「文字」なので、数字に変換して上げる必要がある。

int(数字に変更したい文字)

<ヒント②> 時間によって挨拶の内容を変える = 「もし」時間が◯時から◯時の間だったら・・・

解答例
name = input("お名前は?:")
hour = int(input("時間(24h)は?:"))
def goodmorning():
    if hour >= 5 and hour < 10:
        greeting = "おはよう"  
    elif hour >= 10 and hour < 18:
        greeting = "こんにちは"  
    else:
        greeting = "こんばんは"
    return name + f"さん、{greeting}!"
<br>
goodmorning(name, hour)

🎮 ゲーム開発エンジン Pyxel (ピクセル)入門

さてさて これまでpythonの基礎文法をざっとやってみたわけだけど、これがどう役に立つのかってところだ。 pythonでできることはほんとにいろいろあって、例えばwebサイトを作ったり、スマホアプリを作ったり、ロボットを動かしたりってことができるんだけど、それぞれを実現するためには、pythonの基礎文法に加えて、それぞれの専門分野を少しづつでも勉強していく必要があるんだけど、今回の講義ではゲーム制作をやっていくよ。 pythonの大きな特徴として、「これが実現したい!」というときに、そのために使える便利な道具(「ライブラリ」)がたくさん用意されていることがあげられる。今回はレトロ2Dゲームを作るのに便利な pyxel(ピクセル) というライブラリを使ってみよう。

Pyxelでできること

Pyxelの基本の流れ

pyxelのコードは、大きく以下の3つの関数で構成されている。

例えば、四角い図形が右にスーっと移動するプログラムを書くとしよう。すると、プログラムの流れとしては

  1. 四角の基本データ(サイズ、色、位置情報など)をinit()関数で定義
  2. update関数で、四角を移動する処理をする
  3. draw関数で、移動した位置に四角を描画
  4. update関数で、四角を移動する処理をする
  5. draw関数で、移動した位置に四角を描画

てかんじになる。pyxelで図形の位置を示すのに x座標・y座標 を使って表すよ。右方向に四角が進むということは、x座標が増えていくということになる。

こまけえこたぁいいんだよ

早速やってみよう

Pyxelで図形を表示しよう

まずは最も基本的な図形である四角形を表示してみよう。 全体のコードはこんな感じ

import pyxel

# pyxelを初期化:画面のサイズを200x200ピクセルに設定
pyxel.init(200, 200)

# 四角に関する情報を定義
rect_info = {
    "x": 10,
    "y": 10,
    "w": 100,
    "h": 100,
    "col": 7
}

# update関数:四角を移動する処理をする
def update():
    pass

# draw関数:四角を描画する
def draw():
    # 背景色を黒にする
    pyxel.cls(0)
    # 四角を描画
    pyxel.rect(rect_info["x"], rect_info["y"], rect_info["w"], rect_info["h"], rect_info["col"])

pyxel.run(update, draw)

さて、このままだと四角い図形がドーンとでて終わりになるので、四角を動かしてみよう。update関数に動かす処理を書くんだったけど、四角のx座標を1大きくする処理を書いてみよう

import pyxel

# pyxelを初期化:画面のサイズを200x200ピクセルに設定
pyxel.init(200, 200)

# 四角に関する情報を定義
rect_info = {
    "x": 10,
    "y": 10,
    "w": 100,
    "h": 100,
    "col": 7
}

# update関数:四角を移動する処理をする
def update():
    rect_info["x"] = rect_info["x"] + 1

# draw関数:四角を描画する
def draw():
    # 背景色を黒にする
    pyxel.cls(0)
    # 四角を描画
    pyxel.rect(rect_info["x"], rect_info["y"], rect_info["w"], rect_info["h"], rect_info["col"])

pyxel.run(update, draw)

どうだ、ようわからんだろう!

次回以降細かい使い方の説明はしていくのでよしとしよう。 とりあえず、今のコードのいろんなところをいじってみよう。