リハビリを兼ねてマージソートを実装してみる @Python3 その3

(続きです)  なにが駄目なのか。実は大きなリストを食わせると、リカージョンリミット以上に再帰してしまい、RuntimeErrorを吐いて止まってしまうのだ。  試してみたところ、長さが980くらいでリカージョンリミットに達してまった。  しかしリカージョンリミットの値を大きくするのは解決策とは言えぬ。  まずは第二版をベースに改良を試みた。  simejimarge関数での呼…

続きを読む

リハビリを兼ねてマージソートを実装してみる @Python3 その1

 あ~、やる気が起きない。 …のっけからネガティブメッセージで大変申し訳ないが、事実そうであるから仕方ない。 (;^ω^)  とにかく、昨年の後半から急激に気持ちが落ち込んで、ブログも書けず、Twitterもほとんど投稿せず(もともと少ないけど)、取り組んでいたプログラムもほったらかし。  ギターを再開したことで内なる変化が起こったのは確かだけど、微々たるものであります (´・ω・`) …

続きを読む

ターミナルの画面サイズ(文字数)を取得する方法いろいろ @Linux + Python

 最近、ターミナル(端末エミュレータ)で動作するユーティリティスクリプトをよく作る。毎度の事ながらPython(主に3系)である。  ある日ターミナルの画面サイズ(縦横の文字数)を簡易に取得できないかと思い立ち、調べてみた。 ---  と言っても、3.3以降なら簡単なのであった。 >>> import shutil >>> shutil.ge…

続きを読む

Project Euler に取り組む (レベル2突破編)

 そんなこんなでProject Eulerを楽しんどーる(ホトケ風)。  (今更ですが)先日、ついにレベル3の称号を得た。ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ  ぶっちゃけ数学というものは苦手中の苦手、数学センスは無いに等しいと思っていたがなかなかどうして健闘してるじゃん。って、自分で言うなwww  ただし、答えやアルゴリズムなどについては一切書かない。それがPr…

続きを読む

ipython tips その5

 ProjectEulerの問題を解くときなんかに、変数の内容や計算過程なんかを画面にずらずら表示させることがよくある。ダンプちうやつや。  ところがあまりに多いと画面に収まりきらない場合がある。収まらないだけならまだしもバッファからあふれてしまう場合がある。当然それ以前は見られない訳だ。  デバッグするならデバッガ使え、という人もいるが、練習問題でそこまでせんでも…という気がする。まあ…

続きを読む

float型の数値に小数部があるかを判定する @Python

 今まで、計算結果が割り切れる、言い換えると小数点以下の数値があるかどうかを判定するのに、こんな感じでやってた。 k = a / b if k == int(k): print("割り切れた")  もう一つ別の例を挙げると、平方根を求めたときに、整数になるかどうかを判定するとか。(math.sqrt()を使ってもいいけど、1/2乗することによって簡易的に求められます) k …

続きを読む

ipython tips その4

(続きです) ・%save/%load (ステートメントのセーブとロード)  入力した内容をファイルに保存しておき、必要に応じて再利用することもできる。 In [1]: fhu = ["DURING the whole of a dull, dark, and soundless day in the autumn of the year,", ...: "when the c…

続きを読む

ipython tips その3

(続きです) ・%edit (外部エディタによる編集)  その2で作ったマクロ"ten"を編集したくなったとする。 In [7]: %edit ten  そういう場合は%editコマンドを使う。  デフォルトではWindowsだとメモ帳、Linuxだとviが開く。 for i in range(10): print(":{}:".format(i), end="") …

続きを読む

ipython tips その2

(続きです) ・%time/%timeit (実行時間計測)  お手軽に、スクリプトや関数などの実行時間を計測することもできる。  これのおかげでスクリプト内で計測モジュールをインポートして、コードを仕込むようなことをしなくて済むようになった。  %timeと%timeitの二種類あって、%timeは普通に実行時間を計測して印字してくれる。  %timeitは何度か実行して、最速結…

続きを読む

ipython tips その1

 てな訳でipythonを使い始めて、色々やってみている。中々便利なものであることはよ~く分かった。  ちなみに、Windowsでは1.1.0、Linuxでは1.2.0を使っている。  Windowsは7、LinuxはLMDE(Linux Mint Debian Edition)である。  余談であるが、LMDEは通常のレポジトリだと今のところ0.13.1しかインストールできないみ…

続きを読む

emacsからipython(via mlterm)を立ち上げる

 xyzzyからipython3を立ち上げられたんならemacsからも出来るっしょ。  という短絡的な考えから、ゴリゴリとLispを書いてみた。無印ipython(要するに2系のものね)でも全く同様に出来るので3使いじゃなくてもご心配なく。"ipython3"と書いてあるのを"ipython"に読み替えていただきたい。 (defun ipython3 () (interactive…

続きを読む

xyzzyからipython(via ckw)を開く

 ipythonを使いはじめた。  最近では段々と機能も分かってきてますます便利に使わせていただいておる。ありがたやありがたや。  しかし、立ち上げたあといちいちカレントディレクトリを変更するのが面倒だ(補完してくれるとは言え)。  どうせならソースを変更したあとサクッとテストしたい。  そこでソースを開いたバッファのカレントディレクトリを流しこんで開けないか試してみた。 …

続きを読む

Project Euler に取り組む (再開編)

 Project Eulerに取り組みだしたのは、一昨年のことであった。自分のブログの日付を見て思い出したわ(;^ω^)  趣味と同時に自分のプログラミングスキル/センスをアップさせ、かつ数学脳のパワーアップを目論んで参加を決意した。参加に当たって自分に以下のポリシーを課した。 (1)言語はPython3 (2)便利なライブラリは標準/サードパーティ問わず数多あれども、それらは…

続きを読む

ipython3を導入してみた @Windows7

 以前bpythonをWindowsに入れて使っていたのだが、PCを引越しして全部失われてしまった。またbpythonを入れるのも良いがこれを機に新しく使ったことの無いipythonを試してみることにした。  基本的にはpython3を使うので、3系に対応した"ipython3"をインストールする(2系のもインストールするけど)事にした。 Announcements ― IPython h…

続きを読む

easy_install (setuptools) のインストールで(軽く)嵌った件

 事の起こりは、この間引越しした仕事用PC(Windows7)に、easy_installとpipを入れてやろうと思ったことに始まる。  PyPIを調べてみるとdistribute/setuptoolsどちらもアクティブっぽい感じ?  今のeasy_installはどうなっちゃってるんであろうか。訳分からん。そこで少し悩んだ。  setuptoolsの方が新しいっぽかたったのでそっ…

続きを読む

定期的にファイルをバックアップするスクリプトを作ってみた @Python3 (その後)

 少し前にファイルバックアップスクリプトを作成した。間に合わせ的に作ったものだがちゃんと動いてくれていて誠に結構。  ところが、最近分かってきたのはPCの電源周りが大分厳しい状況にあるらしく、シャットダウンして電源を入れると途中で何度も止まってしまったり再起動がかかったりする。挙動を見た限りだともしかしたらHDDにも関係があるのかもしれない。  何しろ電源を落とすと、翌日立ち上げた時に行…

続きを読む

デコレータあり、柔軟性高まる、また楽しからずや @Python3

 前のエントリーで、with文のユーティリティcontextlib.ContextDecoratorを基底としたクラスをデコレータとした。  もうちょっと頑張ればより柔軟性が増すではないかと思い、ちょっといじってみた。  正直デコレータに関してはいささか心許ない。本当なら難しいものは極力やりたくない。  弱い人間であります(´・ω・`)  いやいや、ということはよ、良い勉強になる…

続きを読む

with文とコンテキストマネージャ型で遊ぶ @Python3

 恥ずかしながらwith文(コンテキストマネージャ型)の何たるかをよく知らぬまま使っていた。  ファイルを開くときにcloseメソッドを呼び出さなくても良いし、エラー処理をする手間も省けて便利~♪、てなくらいにしか認知してなかったのである。  しかしその本質が、withステートメント内の処理に取り掛かる前の"下ごしらえ"と、処理が全て終わった後の"後始末"を自動的(強制的)に行うものであ…

続きを読む

定期的にファイルをバックアップするスクリプトを作ってみた @Python3

 ここ数日、仕事で使ってるPCの調子がおかしい。何が原因か分からんが、常日頃メモや行動記録を残しているChangelogメモのファイルが立て続けに消えた。  起動したらファイルが文字通り無くなっているのだ。どうしてこうなるのかさっぱり分からぬ。HDDか、エディタ(xyzzy)周りか、Dropboxか、それともOS(WindowsXP)の何かが壊れたか…。  たまたまtmpファイルが残っていた…

続きを読む

ctypesでXlib/Xftをさわってみる @Python3 その2

(続きです)  なんなんだろな~。よく分からん。  こうなったらもうちょっとだけ深みに嵌ってみることにするか。毒を喰らわば皿までちう奴や(違うか)。  スケーラブルフォント(トゥルータイプフォント)の導入じゃ。これなら上手くいく!と信じて!!(無駄に熱い)  しかし、Xlibだけだと使えないらしい。ということで今度はXftを導入しなければならぬ。  Xftはスケーラブルフォ…

続きを読む

ctypesでXlib/Xftをさわってみる @Python3 その1

 前のエントリーで、ctypesをいじくってると書いた。  今linux向けのユーティリティソフトを作ろうと考えていて、その機能の一部として非同期にマウスやキーボードのイベントをとらえたいと思っている。  基本的にPython3でまかなおうと思っているので、本当に原始的な部分を触れれば良い。  良いことにPythonにはctypesという標準ライブラリがある。これがあればOSの備える共…

続きを読む

C言語のenumみたいなのをやってみる @Python3

 少し前に、PythonでC言語のSwitch文みたいなことを出来ないかあれこれやってみた。 C言語のswitch文みたいな条件分岐をやってみる @Python その1 その2 その3 その4 手直し  今回もC言語+Pythonネタ。  今、ctypesモジュールで面白いことが出来ないか色々いじくってるのだが、それぞれのライブラリに関するもろもろが定義されているヘッダーファイルの内…

続きを読む

Gaphorで頭の整理出来るかな (Windows編)

 さて、Linux(LMDE)に Gaphor をインストールしたのだが、この Gaphorくん、中身は Python であるからして上手くすれば Windows でも動かせるんじゃないかと考えた。  そこで Gaphor のWebサイト を見てみると、Windows へのインストールに関してこう書かれていた。 Windows For Windows users no real ins…

続きを読む

Gaphorで頭の整理出来るかな

 情けない話だがプログラムを書いているとよく訳が分からなくなる。  もっと事前に練ってから書き出せばいいのだが、思いついたらすぐに書きたくなるタイプゆえ、猪突猛進的にキーボードを叩き出す。で、入り組んでくると訳が分からなくなってくる。  天才とかギークとか呼ばれる人種ならそれでも上手くいくのであろうが凡人である我が身の上では如何ともし難い。  最初に設計を練るのはまあ当然のことなのであ…

続きを読む

mockswitch.py ちょっと手直ししました

 この間、mockswitch.pyなるスクリプト(モジュール)を書いたが、次から次へと不具合が見えてしまって半分涙目になりながらその場しのぎの手直しをした。 C言語のswitch文みたいな条件分岐をやってみる @Python3 その1 その2 その3 その4  いや、本当はバグがあっても、不細工でも一旦は〆る!というつもりだったのだけど、気になるとそこばっかりでかく見えてしまってダメなん…

続きを読む

C言語のswitch文みたいな条件分岐をやってみる @Python3 その4

(続きです)  最後にテストをやってオシマイとする。多分大丈夫だと思うけど…(;^ω^)…まあやってみれば分かるさ。  今回はこんな感じのスクリプトでテストしてみた。今回はコマンドライン引数で分岐条件をとる。 #!/usr/bin/python3 # -*- coding: utf-8 -*- import mockswitch2 as msw import sys d…

続きを読む

C言語のswitch文みたいな条件分岐をやってみる @Python3 その3

(続きです)  どうにももやもやしてしまったので、前回(その2)で一旦区切りをつけたつもりだったが結局書き直してしまった。 ・主な変更点 1. 新たにBranchesクラスを設け、こっちに分岐時の処理(CaseクラスおよびDefaultクラス)を格納するようにした。 2. 各分岐の実行可能オブジェクトに引数を渡せるようにした。 3. 分岐処理が終わったあとに変数の返り値を格納し…

続きを読む