3がつく数字と3の倍数でアホになる関数②
この記事は、岩手県八幡平市のプログラミング教室「アクセルキャンプ」の公開教材です。
アクセルキャンプ(フリースペースプラウド)のリンク
教材の作成依頼等も承っております。ご意見等は、リンク先の問い合わせ欄からお願いします。
教材の転用・利用等は自由です。
前回のまとめ
前回は3の倍数でアホになる関数と、3のつく数字でアホになる関数を別々に作りました.
①3の倍数でアホになる関数
def baisuu(number):
if number % 3 == 0: #余りを求めるのは%
print("アホ!")
else:
print(number)
baisuu(3)
②3のつく数字でアホになる関数
def sanno_tsukukazu(number): #3のつく数で超アホになる関数
if "3" in str(number): #文字に変換したデータに3が入っているかどうか
print("超アホ!")
else:
print(number)
for i in range(1,31):
sanno_tsukukazu(i)
前回の最後で、この2つの関数を実行したら解決すると思いきや、失敗しましたね!
要件定義
まず、どんなプログラムになってほしいのかを整理しましょう。このように、プログラムの内容を整理することを「要件定義」といいます。
- 1から30までの数字を表示(print)する
- その途中で、もしその数が3の倍数3で割ったときにあまりが0になる数だったときは、数字じゃなくて「アホ」と表示する。
- もしその数が3で割り切れる数じゃなくても、3のつく数字(13,23など)だった場合に「超アホ」と表示する。
出力結果は、こんな感じになるはずです。(もったいないので横書きで書きます)
1 2 アホ 4 5 アホ 7 8 アホ 10 11 アホ 超アホ... ...28 29 超アホ
2と3の部分に注目してみましょう。この場合、「3」の数字は、アホになりますか?超アホになりますか?
そう、このプログラムでは、先に3の倍数かどうかのチェックがif文で行われ、もし3の倍数だった場合はアホになり、3の倍数でなかった場合のみ、更に3がついているかのチェックが行われ、ついていた場合は、「超アホ」になります。つまり、2つとも条件を満たしている3は「アホ」になります。
実装しよう
要件定義が終わったあと、実際にコードを書いていくのを「実装」などといいます。では、順番に実装していきます。1の部分の実装は前回までの知識でできます。関数を使ってやってみましょう。
def aho(number):
print(number)
for i in range(1, 31):
aho(i)
関数名が「アホ」になってますね。引数はわかりやすくnumberという名前です。引数として受け取ったデータをそのままprint()で表示しています。
では早速、2の実装をしていきましょう。これはまさに、前回やったところですね。時間がかかってもいいので、自分でやってみましょう。if文を使って、3の倍数かどうかをチェックします。
def aho(number):
if number % 3 == 0:
print("アホ")
for i in range(1, 31):
aho(i)
ifの条件を組み合わせよう
さて、ここが今日のメインテーマです。
皆さんの人生、うまくいってますか?みなさんまだ小学生なのでアレですが、子供の頃は「もし自分の将来がこうだったらいいなー」みたいなことを想像したりするものです。そうなれる人もいれば、なれない人もいて、もしくは「なれたらいいな」という基準が大人になって変わって来たりするものです。先生は幼稚園児の頃「消防士さんになりたい」とかって言ってたらしいですが、いま考えると、あんなきついハードワーク、マヂで無理!とかって思います。
余談はさておき、if文でチェックしたときにそのとおりである場合もあれば、そうでない場合もあって、そうでないときにまたもう一つチェックしたいことがあって、みたいな状況があります。
皆さんこの時期プールに入りますよね?その日プールが使えるかどうか、学校の先生がどうやってチェックしているか、わかりますか?
天候は大丈夫か?
プールがよごれていないか?
水温は大丈夫か?
気温は大丈夫か?
などの項目を順番にチェックしていって、全部OKならプールOK!となります。
では、これをpythonプログラム風に書いてみるとどうなるでしょう。
if 雨が降っている:
プール禁止!
elif プールが汚れている:
プール禁止!
elif 水温が高すぎる・低すぎる:
プール禁止!
elif 気温が高すぎる・低すぎる:
プール禁止!
else:
プールOK!!!
elif ってなんやねん
先週やったif文と、elseに加えて、elifというのが追加されてますね。
これは英語のelse if の略で、pythonではこれを省略してelifと書きます。「エルイフ」と読みます。
elifを「そうじゃなくてもし」と読み替えて、上のプログラムを読んでみましょう。
「もし」雨が降っていたら:プール禁止
「そうじゃなくてもし」プールが汚れていたら:プール禁止
「そうじゃなくてもし」水温が高すぎ・低すぎのとき:プール禁止
「そうじゃなくてもし」気温が高すぎ・低すぎのとき:プール禁止
「そうじゃないとき」:プールOK!!!
てな感じです。まとめると。
- elifは、その前に出てきたifの条件には当てはまらない場合に、更にif文でチェックしたいときに使う
- elseは、それまで出てきたどの条件にも当てはまらなかったときに、あきらめて処理を行うときに使う。(もうこれ以上ifが必要ないとき)
では、aho()関数に戻りましょう。
2・3の条件を、一つのif文にまとめると、こういう感じになります。
def aho(number):
if number % 3 == 0:
print("アホ")
elif "3" in str(number):
print("超アホ")
else:
print(number)
for i in range(1, 31):
aho(i)
実行してみましょう!皆さんちゃんとアホになりましたでしょうか。
elifの性質上、elifがifより先に書かれることはないですし、elseの後ろに来ることもありません。なんにも言われてないのに「そうじゃなくてもし!」って言われたら、ビビリますよね??
elifはいくつでも追加することができます。ここではやりませんが、試しに4で割り切れる数は「ウルトラアホ」になるelifなどを追加してみてください。
宿題!
①4でわったらあまりが3になる数は「あまり3」と表示される関数を作ってください。表示するのは、1から40までです。
② ①のプログラムを改良して、elifを使って、「そうじゃなくて、3の倍数だったときに」「あまりは3じゃないけど3の倍数」と表示するプログラムを書いてください。
プログラムはそれぞれ paizaのサイト で実行しましょう。
しっかり復習してね!ではまた来週!