「python」タグアーカイブ

python で半日つぶれた

python って言語知ってます? 人気があるんだそうですが、私は嫌いです。今日で大っ嫌いになりました。

以前書いていた Raspberry Pi zero を使った signage なんですが、 python で作りました。ライブラリが手頃だったのと、使ったことがない言語への興味から python を使ったんですね。どんな動作をするのかと言いますと、指定したフォルダに入っている画像を指定した秒数ごとに表示するというものです。順番に表示しても面白くないので、ランダムに表示させるようにしています。

ただ、ランダムにするタイミングをループの中において、毎回ランダムな選択をするようにしていました。これだと、ランダム関数によって同じ画像が表示されることがあります。事実ありました。それだと面白くないので、考え方を変えて最初に配列の中身をシャッフルしてそれを順番に表示するようにしました。末尾まで来たら最初に戻ると言うことで、写真の MAX 回後に同じ画像が出ると言うことになります。写真の枚数をある程度多くしてやることで、見た感じ同じ画像が出てくるという印象はなくなります。

もともと配列に画像のファイル名を入れて使っていましたので、後者の方が簡単です。事実、修正する箇所は数行でした。まぁ、プログラム自体が 50 行程度ですので、簡単なものです。

ところが、アルゴリズム的にはむしろ簡単なのに、実行するとエラーが出ます。 python 使ったことある人ならきっと 1 度は陥る、インデント地獄ですw

私が一番最初に覚えた言語は PASCAL でした。その後に BASIC ですかね。 PASCAL という言語はブロックの最初は begin 。最後は end で明示します。 C 言語なんかでもブロックは{}で囲いますよね。 N88-BASIC はどうだっけ? 忘れました。

python の場合どうかというと、インデントでブロックを区切るんですね。確かに、キーを押す回数は少なくなるかもしれません。しかし、明確にブロックの最初と最後を指定する言語になじんだ人間には、インデントで区切るなんて言われても、インデントなんて表示方法の一手段という頭の人間には非常にわかりにくい。

事実、今回数行直すのに半日かかりました。

python 使いの方にはわからないかもしれませんが、苦行でした。


春の海のかなたにつなぐ電話かな

中村汀女

python のエラー

コピペして事を済まそうとする私が悪いんですけどね。 python 好きじゃないっす。

Raspberry Pi でスライドショーをするっていう話、先日したかと思うのですが、あまりうまくいってません。 Zero W 君のパワーが圧倒的に不足していることが原因なのですね。動画( MP4 )を再生させようと思っていたのですが、パワー不足でダメダメです。方向転換してトランジッションはなし。単純なスライドショーをしようとしましたが、いまいちでした。

そこで、ググってみたところ、良さそうな事例が載っていてソースコードも掲載されていたのでコピペでソースコードを持ってきました。私が考えていたのはランダムに表示させたいと言うことだったのですが、そのソースは順番に表示させるものでした。

それじゃ面白くないので、ソースコードの一部を変えてやろうと思ったわけです。まぁ、タイトルにもなっているとおり、ソースコードは python です。私は python をいじったことがありません。インデントの深さで意味が変わるんだ。ということぐらいしか知りませんでしたし、インデントの深さが括弧の代わりになるなんてとても信じられず、学ぶこともやめて頭の隅っこに置いていました。

エラー出るわけですよ。どこにも文法上のエラーなんぞ見当たらないのにエラー出るんですね。で、私の性格上、エラーコードとか見る前に「どこ間違ったかな?」とソースコードをのぞきに行きます。見当たらない。また実行する。エラーが出る。ちょこちょこ変えているうちに、元々のコードに戻したのにもかかわらずエラーが出るようになってしまいました。

どうなったんだ? お手上げ状態ですね。そこで初めてエラーを覗く。遅いですね。最初から見とけって言われそうですが、エラーを読んだのは切羽詰まってからでした。そこには …

TabError: inconsistent use of tabs and spaces in indentation

タブとスペースの一貫性のない使い方。とでも言うんでしょうか? これ見て、タブとスペースの混在が原因か? とピンときました。案の定、混在してましたよ。私はソースコードにはタブを使うのが決まりのようになっているんですが、コピペしたソースコードはタブではなく、スペースが使われていました。考えてみれば、 html の中にタブが入るのはほとんどありませんので、スペースですよね。

私が追記したりしたところにはタブが、元々のコードにはスペースが使われていました。そんなのもエラーとして吐き出すんですね。括弧使えばいいのに。こんな見えにくいものもエラーとしてしまう python は、やはり好きになれません(自分のことを棚に上げているのはもちろんです)。


平らな道でもつまずくことがある。人間の運命もそうしたものだ。神以外に誰も真実を知るものはないのだから。

チェーホフ