3がつく数字と３の倍数でアホになる関数②  （小学生高学年向け・python）

# 3がつく数字と３の倍数でアホになる関数②  

この記事は、岩手県八幡平市のプログラミング教室「アクセルキャンプ」の公開教材です。
[アクセルキャンプ(フリースペースプラウド)のリンク](https://freespaceproud.com)
教材の作成依頼等も承っております。ご意見等は、リンク先の問い合わせ欄からお願いします。
教材の転用・利用等は自由です。
***

  
## 前回のまとめ  
前回は３の倍数でアホになる関数と、３のつく数字でアホになる関数を別々に作りました.  
  

①3の倍数でアホになる関数  
```python
def baisuu(number):
    if number % 3 == 0: #余りを求めるのは％
        print("アホ！") 
    else:
        print(number)

baisuu(3)
```  
  
②3のつく数字でアホになる関数  

```python
def sanno_tsukukazu(number):   #3のつく数で超アホになる関数
    if "3" in str(number): 　　#文字に変換したデータに3が入っているかどうか
        print("超アホ！") 
    else:
        print(number)
    
for i in range(1,31):
    sanno_tsukukazu(i)
```  
前回の最後で、この２つの関数を実行したら解決すると思いきや、失敗しましたね！  
  
## 要件定義  
まず、どんなプログラムになってほしいのかを整理しましょう。このように、プログラムの内容を整理することを「要件定義」といいます。  
1. １から３０までの数字を表示(print)する  
2. その途中で、もしその数が３の倍数３で割ったときにあまりが０になる数だったときは、数字じゃなくて「アホ」と表示する。
3. もしその数が３で割り切れる数じゃなくても、３のつく数字（１３，２３など）だった場合に「超アホ」と表示する。  

出力結果は、こんな感じになるはずです。（もったいないので横書きで書きます）
>1 2 アホ 4 5 アホ 7 8 アホ 10 11 アホ 超アホ... ...28 29 超アホ
  

2と３の部分に注目してみましょう。この場合、「３」の数字は、アホになりますか？超アホになりますか？  
そう、このプログラムでは、先に３の倍数かどうかのチェックがif文で行われ、もし３の倍数だった場合はアホになり、３の倍数でなかった場合のみ、更に３がついているかのチェックが行われ、ついていた場合は、「超アホ」になります。つまり、２つとも条件を満たしている３は「アホ」になります。   
  
## 実装しよう  
要件定義が終わったあと、実際にコードを書いていくのを「実装」などといいます。では、順番に実装していきます。１の部分の実装は前回までの知識でできます。関数を使ってやってみましょう。  
```python
def aho(number):
    print(number)

for i in range(1, 31):
    aho(i)
```  
関数名が「アホ」になってますね。引数はわかりやすくnumberという名前です。引数として受け取ったデータをそのままprint()で表示しています。  
  
  では早速、２の実装をしていきましょう。これはまさに、前回やったところですね。時間がかかってもいいので、自分でやってみましょう。if文を使って、３の倍数かどうかをチェックします。  


  
```python
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()関数に戻りましょう。  
２・３の条件を、一つのif文にまとめると、こういう感じになります。  
```python
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はいくつでも追加することができます。ここではやりませんが、試しに４で割り切れる数は「ウルトラアホ」になるelifなどを追加してみてください。  
  
***
# 宿題！  
①４でわったらあまりが３になる数は「あまり３」と表示される関数を作ってください。表示するのは、１から４０までです。  
  

② ①のプログラムを改良して、elifを使って、「そうじゃなくて、３の倍数だったときに」「あまりは３じゃないけど３の倍数」と表示するプログラムを書いてください。  

***
プログラムはそれぞれ　[paizaのサイト](https://paiza.io/ja)　で実行しましょう。
しっかり復習してね！ではまた来週！