東京大学のPythonプログラミング入門「4-1. ファイル入出力の基本」備忘録

Python勉強中で備忘録です。今回は比較的あっさり終わりました。

⇒以下の解答を作成したところ一応正解。
f.readline()をstr1 = の定義に使えるのか?という疑問はあったが問題なかった模様。
最初の while の繰り返しが雑な感じもある。単にbreakまで繰り返すだけなら他に綺麗な繰り返し方法があるのか?とは思った。

def last_line(name):
total = 0
x = 1
f = open(name, ‘r’)
while x > 0:
f.readline()
str1 = f.readline()
total += 1
if str1 ==””:
f.close()
f = open(name, ‘r’)
break
while x <= total:
f.readline()
x += 1
str2 = f.readline()
return str2

ChatGPTとやり取りした結果の要点は以下の通り。
①たまたまうまくいったが不正解
②whileを使う場合は「while True:」でOK。その場合ずっとTrueではある。
③str1 = f.readline() としても行を読むのは進行する。
 よって
f.readline()
str1 = f.readline()
だと1回のループで2行進む。
④最後にf.close()をやっておくべき。
⑤今回、1回目のループで、最終行に到達するまでのループ回数を記録し、2回目のループで最終行の手前で辞める、という手段をとったが、それは無駄が多い。
1回のループの中でbreakの後に
last = str1
のような「これまでに読んだ中で最後の正常な行」を保存する変数を入れておくことで、それを回避可能。これがないとstr1 =””となって終わってしまう。これがあるから、それの最終行を残せる。

⇒けっこう勉強になる良い問題だと思いました。

⇒以下の解答を作成したところ正解。

def number_of_characters(name):
f = open(name, ‘r’)
all = f.read()
f.close()
return len(all)

⇒以下の解答を作成したところ正解。

def file_upper(infile,outfile):
with open(infile) as i, open(outfile, ‘w’) as o:
all = i.read()
o.write(all.upper())

⇒これについて、後者においても改行がある点について疑問に思ったが、これはprint(line)の時点で改行があるから。*ChatGPT。

コメント

タイトルとURLをコピーしました