この記事の続きです。
[Pythonのお勉強]
ちょっとPythonを書く用事が出来たので、基本的な文法のおさらいの為にPythonで「しがない問題」を解いてみた。
最近、React Nativeのプランクアプリの開発も5月病の所為で進んでないので、趣味開発のリハビリ的な意味も込めて。
さらっとできるかなと思っていたら、自分がアホなのか、酔っ払った状態でスタートしたのがよくなかったのか、そもそもPythonの日本語文字列処理が難しいのか、色々調べながら計2日近くかかってしまった。
リポジトリはこちら。
元ネタはこちら。
自分の他にも解いた人がいたみたい。
[Pythonの文字列処理は難しい]
そもそも"文字列"
と'文字列'
の両方が文字列だってのがJavaメインで使ってる身からするとツラい。まあどっちも動くってのはいい面もあるんだけど、無駄な宗教論争も発生しうるので個人的にはあまり好きじゃない。
ともかく実装を始めてみた。
import random params = u"しくてがない" print(params)
とりあえずこれでええやろ、と思ったら
SyntaxError: Non-ASCII character '\xe3' in file shiganai.py on line 4, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
この仕打ち。SyntaxErrorとな。
Python初心者なので文法なんて知らんがな、と思いながらググる。
この辺りが参考になりそう。
修正してみる。
# coding: utf-8 import random params = u"しくてがない" print(params)
実行するとうまくいった。
確かに、JavaもMavenプロジェクトの場合はpom.xmlで<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
とか書くしな。そんなもんか。
[文字列をランダムにシャッフルする]
この辺は最初から諦めてググる。
Stack Overflowに良さげな回答があったのでこちらを利用する。
とりあえず続きでそれっぽい感じに書いてみる。
print(''.join(random.sample(params, len(params))))
良さそう。
あとは適当に先頭の4文字を取り出してしがない判定をして仕様通りの文字列にしていくだけだ。
[Pythonの否定演算子はnot]
JavaもJavaScriptも否定演算子は「!」だから、そのノリで書いたら動かなくてショック。
if !result:
で実行してみるとまたもやSyntaxError
ですよ。
さっとググって修正版。
if not result:
で、実行してみる。
外れた。動いたけどショック。
[まとめ]
取り上げた内容はめちゃくちゃ基本中の基本な気もしないでもないが、自分のPython経験なんてAWS Lambda用にさらっとサンプルいじったようなものを書いたのと、Udacityでsklearn使ってちょっと機械学習触った程度なんで、一から書いてみると色々足りない部分が補えてよかった。
そういえば、結局最初のご用事はどこかへ行ってしまって、今のところPythonの出番はなくなってしまった。まあそのうち使うこともあるでしょ。
今日のブログ執筆BGMはこちら。