Pythonのwith文で複数のファイルを開く

「input.txt」の内容を「output.txt」に書き込むプログラム

with (open('input.txt') as file_input,
      open('output.txt', mode='w') as file_output):
    for row in file_input:
        file_output.write(row)

withの後に()を書いて、その中に複数のopenを書く方法はPython3.9から使えるようになったそうです。
www.python.jp

以前はバックスラッシュ「\」を使って、下記のように書く必要があったそうです。

with open('input.txt') as file_input, \
     open('output.txt', mode='w') as file_output:
    for row in file_input:
        file_output.write(row)

プログラミングで学べるもの

失敗をすることの大切さ

プログラミングに限らず、
私たちは失敗したほうが早く成長すると思います。

プログラミングは失敗しながら完成させることが多く
失敗によって成長することを実感しやすいと思います。

また、失敗をしても損害が小さいので
失敗の大切さを学ぶのに適していると思います。

よくわからないものとの向き合いかた

プログラミングをやっていると
普段あまり使わない考え方とか、
コンピュータの仕組みに
出会うことになります。

そういった、よくわからないものでも、
時間をかければ理解することができます。

そういう経験によって、
よくわからないものは、すぐにはわかるようにならないが、
時間をかければわかるようになるという経験ができます。

自分でやれることは自分でやってみようという気持ち

プログラミングを勉強すると
少しずつ自分でできることが増えてきます。

その結果、専門家にすべて任せるのではなく、
自分でやれることは自分でやってみよう
という気持ちがわいてきます。

他人と協力するときに大切なもの

プログラミングの世界で他人と協力する場合、
自分のプログラムを他人に再利用してもらう必要があります。

再利用してもらうには、
小さく部品化する、使いやすくする、
抽象度を上げて、汎用性を高める
などが必要になります。

そういう考え方は、他人と協力したり組織を作るときに
役に立つのではないかと思います。

楽をするために苦労することの大切さ

プログラミングを始めると、
最初のうちは勉強に時間がかかる割に
それほど役に立つものが作れないので、
損をすることになります。

しかし、能力が上がれば、
短い時間で役に立つプログラムをかけるようになり、
得をするようになります。

この経験により、
勉強は将来への投資であることが
実感できると思います。

PopplerでPDFファイルの1ページ目を削除する

編集前のファイル名: in.pdf
編集後のファイル名: out.pdf
編集前のファイルのページ数: 99ページ以下
もし、ページ数が3桁であれば、「%03d」とする。
分割したファイルの名前(02.pdf, 03.pdf, ...)の数字の部分の桁数を揃えておかないと
結合するときのページの順番が不正になる。

Popplerのインストール
$ sudo apt install poppler-utils
in.pdfの2ページ目から最後のページまでをページごとに分割してファイルに保存する
$ pdfseparate -f 2 in.pdf %02d.pdf

編集前のファイルを削除する
(この後、ファイルを結合するときに、
ディレクトリ内のすべてのファイルを対象にするので、
編集前のファイルが結合対象にならないようにするため)

$ rm in.pdf

ディレクトリ内のすべてのファイル(分割したファイル)を結合して、
out.pdfとして保存する

$ pdfunite * out.pdf

Pythonで高校数学の問題を解く(条件つきの最大値・最小値)

問題
 x + y = 1 のとき  x^2 + y^2 の最小値を求めよ。

 x = \dfrac{1}{2}, y = \dfrac{1}{2} のとき最小値  \dfrac{1}{2}


xを-10から10までの適当に細かい値で試す。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 10000)
y = 1 - x
z = x**2 + y**2

a = list(zip(x, y, z))
# タプルの3番目の要素(z)の最小値を求める
min_x, min_y, min_z = min(a, key=lambda x:x[2])
print('x =', min_x, 'y =', min_y, '最小値 =', min_z)

plt.plot(x, z)
plt.show()
x = 0.4990499049904997 y = 0.5009500950095003 最小値 = 0.5000018053610542

f:id:collatz:20220209160531p:plain

Pythonのタプルのリストの最大値・最小値を得る

# タプルの3番目の要素の最大値・最小値を求める
a = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
print(max(a, key=lambda x:x[2]))
print(min(a, key=lambda x:x[2]))

実行結果

(7, 8, 9)
(1, 2, 3)

はてなブログでTexで数式を書く

 \displaystyle y = 2x^2 + \frac{1}{3}

[tex: \displaystyle y = 2x^2 + \frac{1}{3}]

 \displaystyle a_n = a_{n-1} + a_{n-2}

[tex: \displaystyle a_n = a_{n-1} + a_{n-2}]

 \displaystyle e = \sum_{n=0}^\infty \frac{1}{n!} = \frac{1}{0!} + \frac{1}{1!} + \frac{1}{2!} + \cdots

[tex: \displaystyle e = \sum_{n=0}^\infty \frac{1}{n!} = \frac{1}{0!} + \frac{1}{1!} + \frac{1}{2!} + \cdots]

式に番号をつける
(番号をつけたら式が中央に配置された。左に寄せる方法はわからない。)
 \displaystyle x = \frac{1 + \sqrt{5}}{2} \tag{1}

[tex: \displaystyle x = \frac{1 + \sqrt{5}}{2} \tag{1}]

複数の式を書いて=の位置を揃える
 \displaystyle \begin{align}
x &= 1 + 1 \\
&= 2
\end{align}

[tex: \displaystyle \begin{align}
x &= 1 + 1 \\
&= 2
\end{align}]