電卓プログラムを作ろう2~プログラムで作りたいものを作る~
2024年11月1日(金)は、8割ほどの出席でした。
- 18時00分~18時30分 タイピング練習
- 18時30分~19時50分 電卓を例にプログラムの要素を学習
- 19時50分~20時00分 あとかたづけ
Contents
タイピング練習
タイピングの練習は、「寿司打」です。
わたしは完全に抜かれてしまいました。少々頑張ったくらいでは、追いつけない差をつけられたように感じます。無念。
とはいえ、クラブ全体をとおして、抜かれたのは1名です。わたしのタイピングスコアを、次に抜くのは誰でしょうか? 有望なメンバーは2人くらいいます。期待しております。
ちなみに、今日のMVPへの賞品は「1,000,000円」。大変喜んでくれたようです。
菓子ばっかりではなくて、賞品も変化をつけないといけませんね。
電卓らしくプログラムを作ろう
電卓プログラムは2回目です。前回から日が開いたのと、前回いなかったメンバーが今回多かったので、復習から始めます。まずは標準出力から。
print("Hello, World!")
print('Hello, World!')
print("Hello,", "World!")
a = "Hello, World!"
print(a)
前回出てきたのは、上3行のコードです。今回は、5~6行目のコードが出てきました。どれも正解で、自由な発想で答えが出てくるのは良いと思います。
標準入力はさらっとできたので、すぐに計算をするプログラム作成へ移ります。
四則演算をするプログラム
いっていることは前回と同じだけれど、若干表現を変えてプログラムを作ります。
>xを入力してください:○
>yを入力してください:△
>足し算:○+△の答え
>引き算:○-△の答え
>掛け算:○✕△の答え
>割り算:○÷△の答え
正解のコードの一例はこちら。
x = int(input("xを入力してください"))
y = int(input("yを入力してください"))
print("足し算", x + y)
print("引き算", x - y)
print("掛け算", x * y)
print("割り算", x / y)
これもだいたいすぐにでき上がっていました。
キャスト(int)を忘れていたり、xとyの大文字小文字の統一ができていなかったりと、多少のミスはありました。ヒントを伝えれば、すぐに気づく程度のミスなのでまったく問題なしのレベルです。
電卓らしくふるまうプログラムにする
ここまでは前回の復習です。ここまでのプログラムだと、入力する数字を変更するときは、1回ずつプログラムを実行しなければなりません。実際の電卓は、一度計算が終わると入力待ちで、次の数字が入力されるまで待機します。この機能を実装します。
ヒントは、下のとおりです。
whileを使って、一度計算が終わったあと、入力待ちになるプログラムを書きなさい。
for文でもできるけれど、whileのほうがかんたんです。というか、ラズPicoでさんざん使ってきたので、瞬殺してほしかったのですが……。
正解の一例はこちら。
while True:
x = int(input("xを入力してください"))
y = int(input("yを入力してください"))
print("足し算", x + y)
print("引き算", x - y)
print("掛け算", x * y)
print("割り算", x / y)
苦戦していたところは、whileの位置、インデントが多かったように思います。
C言語だとかならず{中カッコ}で囲みます。繰り返したい範囲が文字で明示されます。Pythonは、字下げ(インデント)で繰り返し範囲を指定します。小中学生には、インデントの概念が難しいのかなあ。フォローしましょう。
プログラムの終了条件を実装する
このままのプログラムだと、入力する数字を永遠にきいてきます。終われません。もちろん、プログラムを強制終了する手段がありますが、エレガントではありません。そこで、プログラムをエレガントにするお題は次のとおりです。
xに””(空白)を入力したとき、プログラムを終了するように書き換えてください。
ヒント:
ifとbから始まるキーワードを使います。
それぞれ、本を見たり、Web検索してみたり。せっかくビートル山本先生のAI講座を受講したのに、AIを使うメンバーがいないのは残念です。
余談ながら、最近わたしは自分のプログラミングにAI活用しています。AIにドラフトを書かせて、最終的に手修正したら速いこと速いこと。
さて、このお題のよくある間違いはこちらです。
while True:
x = int(input("xを入力してください"))
y = int(input("yを入力してください"))
if x == "":
break
print("足し算", x + y)
print("引き算", x - y)
print("掛け算", x * y)
print("割り算", x / y)
このコードだと、xになにも入力しないとValue Errorがでます。
Value Errorとは、「値がおかしい」ときにでるエラーです。intでキャストできるのは、数字です。空白は数字には変換できないのでエラーが出ます。
わたしの頭の中のシミュレーションでは、このValue Errorを想定し忘れていました。実際に書いてみてうまくいかないことはよくあることです。トライアル&エラーで完成度を高めていけばよいのです。
理由がわかったら、あとはプログラムを改良するだけです。使う要素は、ここまで使ってきた要素だけ。新しい要素は出てこないので、意味を理解してれば、おのずと答えは導き出せるはずです。答えはすこし下の方に書きます。答えを見る前に考えてみてください。
while True:
x = int(input("xを入力してください"))
if x == "":
break
x = int(x)
y = int(input("yを入力してください"))
print("足し算", x + y)
print("引き算", x - y)
print("掛け算", x * y)
print("割り算", x / y)
ほかにもエレガントな書き方がありそうです。今日のところはここまで。
次回は、ビートル山本先生のAI講座です。電卓は次々回です。GUIに進むかな。