2022年03月28日

アタマの衰えは、ルーティーン化との戦いか。python日記-38

ずっと以前、卑近に紙風船を作る名人がいました。
居住地域の代表として百貨店の物産展に呼ばれるほど
の手際の良さで、客の観ているまえでも、
あっという間に作っていたものです。

観察していると、アタマでやっているんじゃないですね。
完全に手を中心とした身体が覚えている技術でした。

プログラミングでも、熟達者はかなり、
そういった面があるんだろうと思います。
あとは、引き出しの多さと、それらを
上手に脳内でインデックス化していて、
スッとよりよい方法が出てくるんだろうと想像します。

課題  ユーザが入力した数の合計を求めるプログラムを書きましょう。
ユーザは最初に数の個数を入力し、次に合計を求めたい数を入力する
ようにします。但し、入力途中で合計が 100 を超えた場合、
処理を打ち切って”Total value exceeded 100.”と表示します。

きのう投稿したコードと似たようなもの、と思いましたが、
入力した数を足して100を超えたところで、
プログラムを終了するのようにするのが、
なかなかできませんでした。決めた回数に行かない先に、
100を超えていも、決めた回数を入力してから、
「100を超えている」の表示が出るような状態でした。
ながーく脱出できませんでした。
#!/usr/bin/env python3

try:
num_of_input = input("Input number of values: ")
zz = int(num_of_input)
i = 0
vals = []
while i < zz:
val = int(input("Input value #" + str(i + 1) + ": "))
vals.append(val)
tt = sum(vals)
if tt > int(100):
raise OverflowError("Sum is over")
#vals.append(val)
i = i + 1
print("The following values are user inputs & total: ")
for val in vals:
print(val)
print("total:",sum(vals))
except OverflowError:
print("Total value exceeded 100.")

raise_except_plusnumber.jpg

vals.append(val)は、リストに入力数値を載せる行ですが、
上のコメントアウトされている赤の行の位置のまま、
明後日の方向のif文の書き方などで、悩んでしました。
正解は、オレンジの位置に入れれば、すんなり解決なんですけど。

前日の投稿では、赤い行の位置で正しかったので、
こういうものは、そこなんだろう、と勝手に決めていました。
でもよく考えてみれば、if文の前に、入力値が
リストに載らなければ、プログラムが機能しない
ということにふと気づきました。昔の蛍光灯。
もっとがんがん勉強しないと、気づきは早くならないですね。

なお、OverflowErrorは、これで機能したから
使っているだけで、正しくは違うのかも知れません。


posted by ブログ開設者 at 20:01| Comment(0) | linux | このブログの読者になる | 更新情報をチェックする