2023/10/10 (火) start
問題1)
小数点第2位表示になっているのは.format()フォーマットメッソドで指定しているからである。少し、このメソッドを説明しておこう。例えば、"明日の天候は晴れである。"で、printで出力するとして、引数を'明日','天候','晴れ'としたら、print("{0}の{1}は{2}である。".format('明日', '天候', '晴れ'))とする。数字は引数の順序であり、0から始める。数字を入れなくてもデフォルトでは{}に引数を順番で入れるようになっている。引数は変数を用いてもよい。t = '明日', w = '天候', f = '晴れ'として、print("{}の{}は{}である。".format(t, w, f))となる。過去のコラムで用いているが、f-stringsは引数を用いずにprint(f"{t}の{w}は{f}である。")で、同様の文章が出力される。
問題2)
whileを用いたループで変数にフラグを持たせ終了させる方法もあるが、breakという実行停止命令を利用。テキストファイルでは最初に'会合欠席者:'を入力しておいて保存しておいた。with open(filename, 'a')の'a'は追記モードの指定である。これであれば、プログラムを何度も実行させ、氏名入力すると、銭形の下へ新規氏名が追加されてゆく。 仮に'a'ではなく'w'での書き込みモードで行って、第一入力でnを押下し終了させると、会合欠席者:というタイトルも消えてしまう。つまり、データがオーバーライドされる。モードには、'r'と'r+'もあり、前者が読込みモード、後者が読書きモードである。指定されなければ、デフォルトでは読込みモードである。読込みモードでは最初からファイル保存されていなければ、FileNotFoundErrorのトレースバックが返される。
ユーザーに整数値入力を求めた時、間違って文字が入力され、int(数値型)に変換する際にValueErrorが出てしまう。このエラー処理(例外処理)に対応しつつ、2つの数を求め、何某かの演算操作の結果を出力するコードを作成せよ。演算操作は任意とする。
#2つの正数の和の正の平方根を求める.
from math import sqrt
print("第一入力で半角英字zを入力すると、ループを終了します。")
active = True
while active:
tem_num_1 = input("\n正数を入力:")
if tem_num_1 == 'z':
active = False
print("終了します。")
else:
try:
operation_num_1 = int(tem_num_1)
tem_num_2 = input("別の正数を入力:")
operation_num_2 = int(tem_num_2)
result = sqrt(operation_num_1 + operation_num_2)
except ValueError:
print("文字を検出:数字キーを押下して下さい。")
else:
print("\n2数の和の正の平方根:{:.2f}".format(result))
#実行結果
第一入力で半角英字zを入力すると、ループを終了します。
正数を入力:654
別の正数を入力:254
2数の和の正の平方根:30.13
正数を入力:f
文字を検出:数字キーを押下して下さい。
正数を入力:6
別の正数を入力:s
文字を検出:数字キーを押下して下さい。
正数を入力:z
終了します。
前のコラム等で言及していなかったが、データの型でstr型(文字列)、int型(数値)は意識しておいてもらいたい。上のコード内で'z'というように、' '記号でzを囲んでいるがこれはzがstr型と宣言している。input()関数のデータはstr型でint()関数を用いることで、int型に変換している。MS officeのExcelを新規で開き、何某かの書式設定を施していないならば、文字を入力するとセルの左端、数値入力ではセルの右端にと表示されるはず。Excelでもデータ型は区別している。Pythonで型が不明なときは対話型シェルでtype(変数)を入力実行すれば、数種類の型表示があるが、<クラス(class) 'str'>とか<クラス(class) 'int'>等々とかで表示される。エラーがでればトレースバックでstrやintの型エラーかは英語表示だが、よく観察すれば、練習を積んでいくうちに理解できると思っている。
会合の欠席者に氏名を入力してもらい、欠席名簿をテキストファイルに保存せよ。
"""
集会があるとして、欠席者に名前を入力してもらい、氏名をテキストファイルに
書き込みする。
"""
filename = 'absentee.txt'
with open(filename, 'a', encoding='utf-8') as f:
print("明日の会合に欠席する人は氏名を入力して下さい。")
confirm_answer = input(" 欠席で宜しいなら、y を 違うなら n を入力。: ")
while True:
if confirm_answer == 'n':
print("入力終了です。")
break
absent_name = input("氏名を入力して下さい。: ")
f.write(f"{absent_name}\n")
print("\nこれで入力を終えるなら、finを入力願います。継続入力は任意の文字キーを押下。")
fin_answer = input("終了しますか?: ")
if fin_answer == 'fin':
print("\n終了します。ありがとうございました。")
break
#対話シェルでの実行出力
明日の会合に欠席する人は氏名を入力して下さい。
欠席で宜しいなら、y を 違うなら n を入力。: y
氏名を入力して下さい。: 怪盗 ルパン
これで入力を終えるなら、finを入力願います。継続入力は任意の文字キーを押下。
終了しますか?: g
氏名を入力して下さい。: 次元 大介
これで入力を終えるなら、finを入力願います。継続入力は任意の文字キーを押下。
終了しますか?: h
氏名を入力して下さい。: 峰 不二子
これで入力を終えるなら、finを入力願います。継続入力は任意の文字キーを押下。
終了しますか?: j
氏名を入力して下さい。: 銭形 幸一
これで入力を終えるなら、finを入力願います。継続入力は任意の文字キーを押下。
終了しますか?: fin
終了します。ありがとうございました。
# 第一入力で n を押下
明日の会合に欠席する人は氏名を入力して下さい。
欠席で宜しいなら、y を 違うなら n を入力。: n
入力終了です。
# absentee.txtとして保存された内容
会合欠席者:
怪盗 ルパン
峰 不二子
次元 大介
銭形 幸一
▲ トップへ戻る
戻る
カテゴリー