疑念は探究の動機であり、探究の唯一の目的は信念の確定である。

数学・論理学・哲学・語学のことを書きたいと思います。どんなことでも何かコメントいただけるとうれしいです。特に、勉学のことで間違いなどあったらご指摘いただけると幸いです。 よろしくお願いします。くりぃむのラジオを聴くこととパワポケ2と日向坂46が人生の唯一の楽しみです。

第6回: Pythonのdatetimeとjpholidayを使って給料日がいつなのか表示する関数を作った

概要: 今回Pythondatetimejpholidayを使って、いつ給料日か判定する仕組み(payday関数)をつくった。datetimeは日にちにかんするモジュールであり、これはPythonの標準ライブラリの1つである。たいしてjpholidayは日本の祝日を調べるときに使うモジュールであり、pipからインストールしなければならない。この2つをインポートして給料日がいつなのか調べることができる。
まずモジュールの説明、標準ライブラリの説明、インストールの仕方を勉強する。そのあとにpayday関数の論理(ロジック)を解説する。次にdatetimejpholidayを使って「祝日でなくかつ平日である日」という条件をつくる。最後にpayday関数のプログラム全体を解説する。

#ある年の給料日がいつなのか表示するpayday関数
import datetime as dt
import jpholiday as jp
def payday(year, initial_day):
    for month in range(1, 13):
        day = initial_day
        week = {0: '(月)', 1: '(火)', 2:'(水)', 3:'(木)', 4:'(金)', 5:'(土)', 6:'(日)'}
        while(True):
            date_month = dt.date(year, month, day)
            weekday_month = date_month.weekday()
            is_holiday_month = jp.is_holiday(date_month)
            if (is_holiday_month is False) and (weekday_month != 5 ) and (weekday_month != 6):
                break                                
            day-= 1
        print(str(year) + '年' +str(month) + '月' + str(day) + '日' + week[weekday_month])



#2019年の15日振込の場合
payday(2019, 15)

"""
2019年1月15日(火)
2019年2月15日(金)
2019年3月15日(金)
2019年4月15日(月)
2019年5月15日(水)
2019年6月14日(金)
2019年7月12日(金)
2019年8月15日(木)
2019年9月13日(金)
2019年10月15日(火)
2019年11月15日(金)
2019年12月13日(金)
"""


#2019年の25日振込の場合
payday(2019, 25)

"""
2019年1月25日(金)
2019年2月25日(月)
2019年3月25日(月)
2019年4月25日(木)
2019年5月24日(金)
2019年6月25日(火)
2019年7月25日(木)
2019年8月23日(金)
2019年9月25日(水)
2019年10月25日(金)
2019年11月25日(月)
2019年12月25日(水)
"""

ここで学ぶこと

  1. モジュール、パッケージ
  2. 標準ライブラリ
  3. モジュールのインストール
  4. モジュールのインポート
  5. datetime
  6. jpholiday
  7. for
  8. while, break
  9. if
  10. 辞書型
  • はじめに: 給料日がいつなのか知りたい!
  • モジュールについて
    • 標準ライブラリ
    • モジュールのインストール
    • モジュールのインポート
  • payday関数のロジックについて
  • 条件「祝日でなくかつ平日である」を書く
  • payday関数のプログラム
  • 最後に
    • 改善点
    • 応用編
  • 追記 2019/07/29 月末の支払い日・ある月から一年間の支払日の表示
続きを読む

番外編: python2とpython3の違いについてのまとめ

ごぶさたです。

最近はずっと何も書けない状態が続いています。4月から始めた仕事も少しずつですが慣れてきました。

現在、私はプロジェクトに参加していて、そこではPython2でプログラムを書いています。上司に「このプロジェクトには続きがあって、第二弾がこれからある」と言われました。
そのとき私は「現在ではPython2で書かれていますが、第二弾はPython3で書かれるのですか?」と尋ねました。 すると「引き続き、2で書く。3で書こうとするならば、ほとんど最初から書き直さなければならないからね。 続編のプロジェクトだから今やっているプロジェクトで使われているプログラムを使う。」と答えました。
また、友達に「いま参画しているプロジェクトではPython2で書かれている」と伝えたら、「それは大変だね」と同情されました。

そんな話を聞かれたので「Python2とPython3はそれほどまでに違うのか?」と思いました(今でも少しそうです)。


そこで今回は、私が気づいたPython2とPython3の違いについてまとめてみたいと思います。
またこれは違いがわかり次第、何回も更新して追記したいと思います。

  • プリント関数について
  • 辞書型について
  • unittestについて
    • インポートについて
    • open関数にパッチをかける方法について
  • 追記 2019/07/02: 組み込み関数range()について
続きを読む

とりあえず何か書く。

今月も何も書かなかった。
だから何か書く。

ちゃんとノートを作って書かなければならないが、まだできていない。
ネタも結構あるが、まだまだである。

SQLの論理値がTrueとFalseだけでなくUnknownというものもある三値論理であることを知った。
それには驚いた。

論理学の先生にはかつて「多値論理の否定の解釈は難しいです。」と言っていた。そのような記事もある。

この三値論理「真」「偽」「未知」という否定は次のように定義されている。

not true = false (obvious)
not false = true (obvious)
not unknown = unknown (!!)

つまり、「知らない・わからない」の否定もまた「知らない・わからない」となっているのである。

これはしょうがないと言えばそうなのだが、現実の感覚とは違う。当然ながら、「知らない・わからない」の否定は「知っている・わかる」である。

調べたらSQLを作った人は最初、三値論理ではなく四値論理を考えていたらしい。「不明」にかんして詳細な分析をした挙句に、四値がいいと考えたらしい。しかし、どういうわけか三値になったということ。それでもどうして三値になっているのかまだいまいちわからない。

Unknownが必要なのかどうかもよくわからない。しかし、プログラミング言語はすべてBooleanであるとは限らないことが知れてとてもためになった。どのように数理論理学の知識がSQLに応用されているのかは非常に気になる。



おしまい

AIの未来を妄想してみた。自動化された機械に責任はあるのか?

仕事が始まり、仕事に慣れるために、ここ最近仕事以外何も考えられない生活が続いていた。
仕事先でいろいろ話を聞いてきた中で、次のような疑問が生じた。


AIのアシストについて
現在ではAIは人間の行う何かに対してアシスト(補助)をしている。例えば、自動車のアシスト機能である。他にも医療においてAIがある腫瘍が陽性か陰性かをパーセンテージで判断して、最終的には医者が判断を下すという取り組みもある。

AI研究者の目標は当然ながらAIが全自動ですべて行うことである。例えば自動運転や自動手術などである。しかしいまだそのような自動化は実現されていない。AIは先ほどの例のようにあくまでもアシストにとどまっているのである。アシストにとどまっている理由は単純で、現代ではまだ技術的に自動化が不可能だからである。

しかしもし将来、自動化が実現できたならばどうなるのか? それでもAIはアシストにとどまるのだろうか? 人間が意図的にAIの自動化をやめる決断を下せるのか? 自動化が技術的に可能ならば、本当に自動化を行うのだろうか?

自動化が行われたとき問題となるのは"責任の所在"がわからなくなるということである。責任がなくなる、少なくとも責任の所在が曖昧になってしまう。したがって、医療や運送などの事業には責任の所在をはっきりと示すために、自動化をーーたとえ実現できたとしてもーーしてはならず、アシストにとどめるべきである。そのように私は思った。

この話をいろいろな人にした。私の意見に対していろいろな指摘がなされた。

ある人は私の「たとえ全自動となっても責任の所在をはっきりとするためにアシストにとどめるべきである」という意見に賛成した。しかし、その人はさらに「責任の所在を明確にすべきかはケースバイケースである」と指摘された。つまり、ある場合には逆に責任の所在を曖昧にしたいということがあり、その場合には自動化は喜ばしいことであるということである。

そのような具体例は何かと問い詰めたら、その人はーーあまりいい例ではないがーー戦争と死刑執行を言った。戦争責任は誰しもが取りたくないし、もし機械が勝手に自動で戦争を起こしたのならば、その責任を取らなくて済む。したがって、戦争を行う者にとっては自動化は喜ばしいことであるとのことである。また、現在死刑を執行するさい、死刑のボタンが何個かあり何人かが同時に押している。それは人殺しを実行した責任を感じたくないために、死刑のボタンを何個か設定して、何人かが同時に押している。それは殺したという責任の所在を曖昧にするための処置である。機械が自動で殺すことができるのならば、そのような配慮をすることもなく、誰も責任を取らずに殺すことができる。

これらは自動化による責任の曖昧化のいい例なのかもしれない。

その人と議論する前は「責任の所在が曖昧になることはどのようなケースであってもいいことはない」と思っていたが、場合によってはそうとも限らずむしろ責任が曖昧になっていいこともあるのではないかと思った。ただもっといい例が欲しかったのだが。

もう1人は次のことを言った。

確かに自動化によって責任の所在が不明瞭になるだろう。しかし、自動化することによって手動よりも圧倒的に事故が減少したり、確実に手術が執刀されるのならば、ーーつまり自動化されることにより便利になるのならばーー結局は自動化が主流となるのではないかということである。つまりアシストを超えて完全な自動となるのではないかということである。もちろん、事故がゼロにはならないだろうからもしそうなったら、責任問題が出てくるのは当然である。しかし、そこはうまく社会や政治が責任問題を解決するだろうとのことである。
「もし事故責任がプログラマーとなったら、誰も自動化のプログラムを書こうとはしない。そうしたら、自動化で得られる圧倒的な利便性を社会が享受することができない。そうなれば政治家や社会が『自己責任はプログラマーではない』と考えて、結局事故責任の所在がどこなのかを社会が決めるだろう。それとも自動化の恩恵を受けるためにそもそも"責任"の概念が変容するのかもしれない。」

その人はアシストにとどめるべきであるという私の意見に対して否定的で自動化がよければ結局はそちらに移行するのではないかということである。責任問題はそのときに社会や政治がなんとかするだろうとのことである。


「自動運転の車が事故を起こしたら誰が責任を取るのか」ーー私にはこの単純で、しかし難解な、そして来るべき喫緊の問題に対して全く答えがわからない。これについて法律の専門家たちはどう考えるのだろうか? このような問題をちゃんと考えて欲しいと思う。くだらないことにいつまでも議論することなく。




僕から以上

忙しくてブログを更新できなかったが、いざ書こうと思ったら何も思いつかなかった。

先月から忙しくて、ブログを更新できなかった。4月分のブログが0なのも嫌だから、適当に近況を書こうと思う。

更新されていなくても毎日、100件ぐらいのアクセスがあった。

3月から4月中旬までは「北大」についてのブログがよくアクセスされていた。

いまは何故か圧倒的なパーセンテージで「Pythonで最大公約数のプログラムを書いた」がアクセスされている。

書くネタみたいなものは、一応あるのだがまだちゃんとまとめきれていない。だから書けない。

4月から働き始めて、仕事のために生きて、仕事のために飯を食って、仕事のために寝ているという状況である。平日に勉強するのはほとんどできない。休日には休みがあるが、その間に数学を勉強したり語学を勉強したりブログを書いたりすることはまだできない。そこまでの余裕がまだないからである。

働く前は「働きながら勉強することは簡単にできるだろう」と思っていたがそうでもなかった。時間の使い方をもう少し考えなければならない。電車の中でどのように過ごすべきなのか。しかし本当の満員電車では本や携帯すらも開くことができないから、さてそんななかで何ができるのだろうか。

「『そんなに仕事が辛いならばさっさと辞めればいいじゃん』と言う奴は何も現実を知らない」というのが少しだけわかった気がする。それは貯金がなければ次の仕事を見つけても金欠になってしまうからということである。
部屋を引っ越ししなければそこまでお金は消費しないかもしれない。しかし、たとえそうだとしても新しい仕事を見つかってそこから給料がもらえるまでに2ヶ月ぐらい無給で生活しなければならない。
例えば、4月に新しい仕事を始めたならば、給料が支払われるのは翌月の5月15日かもしれない。そうなれば1ヶ月半は無給なのである。ということは最低でも1ヶ月分の家賃の貯金がなければならない。それプラスもちろん光熱費や生活費や定期券購入などにお金が消えていく。

これは今住んでいる家から引っ越しせずにさらにすぐに新しい仕事が見つかった場合である。それでも貯金は最低10万以上なければならない。
しかし、別の場所に引っ越さなければならなかったり、新しい仕事先がなかなか見つからなかったならば、それだけでお金は消費される。貯金は20万や30万あってもあっという間に消えていくだろう。引っ越し費用は不動産への仲介料を含めると20万以上一気に消えていく。

もちろん友人や家族などからお金を借りるという選択肢はある。しかし本当に1人で生きていて何のあてもない人にとっては、そのぐらいのお金がたまっていなければ今働いている職場を辞めて新しい仕事をするのは極めて難しい。というか不可能である。もしも現在働いている仕事が安月給で全く貯金ができないのならば、辞めたくても辞められないだろう。

まぁ、お金は貯めれるときに貯めなきゃダメだということですね。






僕から以上

書評たち: 近代科学の誕生についてのいくつかの本

(改定 Version 2: 2019/03/10)
かつて評者は「近代科学がなぜ西欧で誕生したのか」という問題を考えるためにいくつかの本を読んだ。今回はそのまとめである。
次の3冊4冊を書評する。と言ってもほどんどすべて忘れたし、だからと言ってこれらの本を読み返すことなく軽く読み直した後、さっさと売る。

吉田博司
『ヨーロッパ思想を読み解く 何が近代科学を生んだか』2014
ちくま新書 1083


佐伯啓思
『西欧近代を問い直す 人間は進歩してきたのか』2014
PHP文庫


下田淳
『「棲み分け」の世界史 欧米はなぜ覇権を握ったのか』
NHK出版 1222

「棲み分け」の世界史 欧米はなぜ覇権を握ったのか (NHKブックス)

「棲み分け」の世界史 欧米はなぜ覇権を握ったのか (NHKブックス)

広井良典
『ポスト資本主義 科学・人間・社会の未来』
岩波新書


ただし、数年前に読んだきりであまり覚えていない。

続きを読む