この記事は、岩手県八幡平市のプログラミング教室「アクセルキャンプ」の公開教材です。
アクセルキャンプ(フリースペースプラウド)のリンク
教材の作成依頼等も承っております。ご意見等は、リンク先の問い合わせ欄からお願いします。
教材の転用・利用等は自由です。
(小学生)アクセルキャンプ高学年クラス7/20
「3の倍数と3のつく数だけアホになる」プログラム
(参考動画:世界のナベアツ)
プログラムの使用は以下の通りです。
①まず、1から30までの数字を連続で出力するプログラムを用意します
②もし数字が3の倍数だったら、数字ではなく「アホ!」と出力する関数を作ります
③もし数字に「3」が含まれていたら「超アホ!」と出力する関数を作ります
③もし②・③の両方の条件がそろっていたら「めっちゃアホ!」と出力します。
今週の学習内容
①関数の使い方を復習します
②関数の中でif文の使い方を学びます
①1から30までの数字を出力しよう
for i in range(1,31):
print(i)
for文の書き方忘れちゃったぜ!ていう人は、とりあえずこんなだったかなーという感じで思い出しながら、あとで復習しましょう。
これで、1から30の数字が連続で表示されているので、これに関数を追加して、まずは3の倍数のときにアホになる関数を作りましょう。
3の倍数の時だけアホになる関数
まず、関数の書き方をおさらいします。
def 関数名(引数):
関数の処理1
関数の処理2
・・・
引数の使い方、覚えてますか?アヤしいひとは、このページで復習しましょう!
では関数を書いていきます。関数名:baisuu, 引数名:number で作ってみましょう。
def baisuu(number):
#もし3の倍数だったら、「アホ!」と表示
#そうでなければ、引数numberを表示
baisuu(3)
中身の処理を書いていきましょう。「3の倍数である」ということは「3でわったときに余りが0である」ということと同じなので、以下のようにします。
def baisuu(number):
if number % 3 == 0: #余りを求めるのは%
print("アホ!")
else:
print(number)
baisuu(3)
if文の書き方
もし~なら〇〇する
もし~なら✕✕する
というように、条件によって処理をかえたいときに、if文を使います。
if文の使い方
if 条件①:
条件①のときに実行したい処理
elif 条件②:
条件①ではなく、②の時に実行したい処理
elif 条件③:
条件①でも②でもなく、③の時に実行したい処理
else:
↑のどの条件も当てはまらないときに実行したい処理
elifの数は、設定したい条件の数によって変わります。今回は、「3の倍数か、そうでないか」だけの条件なので、elifはなしで、ifとelseのみになりました。
では、関数をfor文の中に組み込んで、1から30までの数字を連続で処理して表示してくれるようにしましょう。
def baisuu(number):
if number % 3 == 0: #余りを求めるのは%
print("アホ!")
else:
print(number)
for i in range(1,30):
baisuu(i)
3のつく数字でアホになる関数
ここからはちょっと発展的な内容です。細かいところはいちいち覚えなくても大丈夫なので、プログラムで何をやっているのかをしっかり理解することに集中してください。
整数型(int)から文字列型(str)に変換
例えば、「13」という数字に3が入っているかは人間には見ただけで簡単にわかりますが、実はコンピュータにはわかりません。これはコンピュータが「2進数」という方式で数字を認識しているからなんですが、その辺の詳しい話が気になる人は、この記事を読んだりすればなんとなーくわかるかもしれません。
この問題を解決するには、13を数字ではなく「13」という文字として認識すれば、「お、この文字の2文字目に『3』があるぞ!」とわかります。以下の①、②を別々のプログラムとして実行してみましょう。
# ①数字(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があるよ")
# 実行結果:3があるよ!
では、今intになっている1-30の数字を文字列にするにはどうしたらいいでしょう?便利な関数がpythonに用意されています。
int(数字)のデータをstr(文字)に変換する
str(変換したいintのデータ)
str(文字)のデータをint(数字)にする
int(変換したいstrのデータ)
変換したい型の名前が関数名になっていて、引数にデータを入れれば、変換してくれます。(※ただし、明らかに数字にできない文字データをint()で数字にしようとすると、当然エラーになります。)
では、整数を文字に変換し、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)
よっしゃ!関数二つできたからこいつら合体させればいんじゃね?俺天才!これで勝つる!!
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
超アホ!
アホ!
なんか思てたんとちゃう!なんでや!!
これはまた次回解決します!
宿題!
1から100の範囲の数字で、10の倍数だけ「10の倍数だよ!」と出力し、そうでない場合はそのまま数字を出力するプログラムを、以下の②パターンで作ってください。
①%を使って、10で割ったあまりを使って処理をするパターン
②10の倍数の後ろには必ず0が入る性質を利用して、str()を使うパターン
プログラムはそれぞれ paizaのサイト で実行しましょう。
テストでは何も見ずにこれをかける必要があります!しっかり復習してね!ではまた来週!