電卓プログラムを作ろう2~プログラムで作りたいものを作る~

2024年11月1日(金)は、8割ほどの出席でした。

  • 18時00分~18時30分 タイピング練習
  • 18時30分~19時50分 電卓を例にプログラムの要素を学習
  • 19時50分~20時00分 あとかたづけ

タイピング練習

タイピングの練習は、「寿司打」です。

わたしは完全に抜かれてしまいました。少々頑張ったくらいでは、追いつけない差をつけられたように感じます。無念。

とはいえ、クラブ全体をとおして、抜かれたのは1名です。わたしのタイピングスコアを、次に抜くのは誰でしょうか? 有望なメンバーは2人くらいいます。期待しております。

ちなみに、今日のMVPへの賞品は「1,000,000円」。大変喜んでくれたようです。

菓子ばっかりではなくて、賞品も変化をつけないといけませんね。

電卓らしくプログラムを作ろう

電卓プログラムを作ろう1~競技プログラミングに向けて~

2024年10月11日(金)は、5割ほどの出席でした。 Contents1 タイピング練習2 電卓プログラムを作ろう2.1 まずは標準出力printと標準入力input2.2 プログラムに計算をさせ…

電卓プログラムは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に進むかな。