３の倍数・３のつく数字だけアホになるプログラム①（小学生高学年向け・python）

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

# （小学生）アクセルキャンプ高学年クラス7/20  
# 「３の倍数と３のつく数だけアホになる」プログラム  
(参考動画:[世界のナベアツ](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=video&cd=&cad=rja&uact=8&ved=2ahUKEwixldHDoYb5AhUTAYgKHcjhDxkQtwJ6BAgLEAI&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DS3sxqexw6pU&usg=AOvVaw1aczeZv8yXkUjdpGJOyQK7))    
プログラムの使用は以下の通りです。
>①まず、１から３０までの数字を連続で出力するプログラムを用意します  
②もし数字が３の倍数だったら、数字ではなく「アホ！」と出力する関数を作ります 
③もし数字に「３」が含まれていたら「超アホ！」と出力する関数を作ります
③もし②・③の両方の条件がそろっていたら「めっちゃアホ！」と出力します。  
  
## 今週の学習内容  
①関数の使い方を復習します
②関数の中でif文の使い方を学びます

## ①１から３０までの数字を出力しよう
```python
for i in range(1,31):
    print(i)
```
for文の書き方忘れちゃったぜ！ていう人は、とりあえずこんなだったかなーという感じで思い出しながら、あとで復習しましょう。  
これで、１から３０の数字が連続で表示されているので、これに関数を追加して、まずは３の倍数のときにアホになる関数を作りましょう。  
  
## ３の倍数の時だけアホになる関数  
まず、関数の書き方をおさらいします。
```
def 関数名(引数):
    関数の処理１
    関数の処理２
　　・・・
```
引数の使い方、覚えてますか？アヤしいひとは、[このページ](https://qiita.com/ricky-sensei/items/8957b920a5fd4d2e461a)で復習しましょう！　
では関数を書いていきます。関数名:baisuu, 引数名：number　で作ってみましょう。
```python
def baisuu(number):
    #もし３の倍数だったら、「アホ！」と表示
    #そうでなければ、引数numberを表示
baisuu(3)
```  

中身の処理を書いていきましょう。「３の倍数である」ということは「３でわったときに余りが０である」ということと同じなので、以下のようにします。  
```python
def baisuu(number):
    if number % 3 == 0: #余りを求めるのは％
        print("アホ！") 
    else:
        print(number)

baisuu(3)
```  
　　
# if文の書き方  
もし～なら〇〇する  
もし～なら✕✕する　　
というように、条件によって処理をかえたいときに、if文を使います。  
>if文の使い方　　
```
if 条件①:
    条件①のときに実行したい処理
    
elif 条件②:
    条件①ではなく、②の時に実行したい処理
    
elif 条件③:
    条件①でも②でもなく、③の時に実行したい処理
    
else:
    ↑のどの条件も当てはまらないときに実行したい処理
``` 
elifの数は、設定したい条件の数によって変わります。今回は、「３の倍数か、そうでないか」だけの条件なので、elifはなしで、ifとelseのみになりました。  
では、関数をfor文の中に組み込んで、１から３０までの数字を連続で処理して表示してくれるようにしましょう。  
```python
def baisuu(number):
    if number % 3 == 0: #余りを求めるのは％
        print("アホ！") 
    else:
        print(number)

for i in range(1,30):
    baisuu(i)
```  


## ３のつく数字でアホになる関数  
ここからはちょっと発展的な内容です。細かいところはいちいち覚えなくても大丈夫なので、プログラムで何をやっているのかをしっかり理解することに集中してください。  
  

### 整数型(int)から文字列型(str)に変換  
例えば、「１３」という数字に３が入っているかは人間には見ただけで簡単にわかりますが、実はコンピュータにはわかりません。これはコンピュータが「２進数」という方式で数字を認識しているからなんですが、その辺の詳しい話が気になる人は、[この記事](https://chugaku-juken.com/n-sinnhou/)を読んだりすればなんとなーくわかるかもしれません。  
この問題を解決するには、１３を数字ではなく「１３」という文字として認識すれば、「お、この文字の２文字目に『３』があるぞ！」とわかります。以下の①、②を別々のプログラムとして実行してみましょう。  
```python
# ①数字(int)から文字は検索できない！
thirteen_int = 13

if "3" in thirteen_int:
    print("3があるよ")
    
#実行結果
#TypeError: argument of type 'int' is not iterable  エラーになる

#②文字(str)からなら検索できる！
thirteen_str = "13"

if "3" in thirteen_str:
    print("3があるよ")
    
# 実行結果：３があるよ！
```  
では、今intになっている１－３０の数字を文字列にするにはどうしたらいいでしょう？便利な関数がpythonに用意されています。  
>int(数字)のデータをstr(文字)に変換する
```
str(変換したいintのデータ)
```
>str(文字)のデータをint(数字)にする  
```
int(変換したいstrのデータ)
```

変換したい型の名前が関数名になっていて、引数にデータを入れれば、変換してくれます。（※ただし、明らかに数字にできない文字データをint()で数字にしようとすると、当然エラーになります。）　　　

では、整数を文字に変換し、３があったら「超アホ！」になるプログラムを作ってみましょう。  
```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)
```  
## よっしゃ！関数二つできたからこいつら合体させればいんじゃね？俺天才！これで勝つる！！  
```python
def aho(number):
    
    if "3" in str(number): #余りを求めるのは％
        print("超アホ！") 
    else:
        print(number)
    
    if number % 3 == 0:
        print("アホ！")
    else:
        print(number)
    

for i in range(1,31):
    aho(i)
# 実行結果：
1
1
2
2
超アホ！
アホ！
4
4
5
5
6
アホ！
7
7
8
8
9
アホ！
10
10
11
11
12
アホ！
超アホ！
13
14
14
15
アホ！
16
16
17
17
18
アホ！
19
19
20
20
21
アホ！
22
22
超アホ！
23
24
アホ！
25
25
26
26
27
アホ！
28
28
29
29
超アホ！
アホ！
```  
# なんか思てたんとちゃう！なんでや！！  
これはまた次回解決します！  
  
# 宿題！
１から１００の範囲の数字で、１０の倍数だけ「１０の倍数だよ！」と出力し、そうでない場合はそのまま数字を出力するプログラムを、以下の②パターンで作ってください。  
①％を使って、１０で割ったあまりを使って処理をするパターン  
②１０の倍数の後ろには必ず０が入る性質を利用して、str()を使うパターン  
***
プログラムはそれぞれ　[paizaのサイト](https://paiza.io/ja)　で実行しましょう。
  テストでは何も見ずにこれをかける必要があります！しっかり復習してね！ではまた来週！