booleanの値によって異なる文字列を得るスニペット

条件分岐を使わずに,boolean値を得るかっこいい方法を見つけました。 Python3/Lib/test/test_unicodedata.pyより抜粋しています。

for i in range(0x10000):
    char = chr(i)
    data = [
        "01"[char.isalnum()],
        "01"[char.isalpha()],
        "01"[char.isdecimal()],
        "01"[char.isdigit()],
        "01"[char.islower()],
        "01"[char.isnumeric()],
        "01"[char.isspace()],
        "01"[char.istitle()],
        "01"[char.isupper()],
    ]
    # 以下省略...

ご覧のとおり、文字列のスライスをうまく利用していますね。 この手法を使えば、リスト内包表記もいつもより短く書けるかもしれません。

Pythonのインタラクティブシェルが履歴にアクセスできないときは

Pythonインタラクティブシェルでquit()したときに PermissionError: [Errno 13] Permission denied: 'C:\\(中略)\\.python_history' となってコマンド履歴が保存されないことがありました。

そんなときは慌てず騒がずそのファイルに隠しファイル属性がついていないか確認しましょう。

…ってわかってれば1時間無駄にしないで済んだのに。

白昼夢

Google謹製、Deep Dreamを体験できるサイトがあります。

deepdreamgenerator.com

面白そうですよね。ちょっと試してみました。
例の動画みたいなおぞましいものが出来上がるのかと思うとわくわくしますね。

テストに使ったのはこちら、ジョルジョ・デ・キリコ『街角の神秘と憂鬱』。 f:id:mo_san:20150918054620j:plain

こちらがその結果です。 f:id:mo_san:20150918054356j:plain

いかがでしょう? あまり予想したほどには変わっていない印象です。
ですが、もともとの絵の持っている、黄昏時に感じるような形のない怖さと相まって、この絵は別の世界を獲得したかのようです。 音楽でいうとリミックスです。

二分探索で数字を仕分け

ちょっと面白いコードを見つけました。と言ってもPythonの公式リファレンスに載ってるものですが。

>>> def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
        i = bisect(breakpoints, score)
        return grades[i]

>>> [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]
['F', 'A', 'C', 'C', 'B', 'A', 'A']

8.6. bisect — 配列二分法アルゴリズム — Python 3.3.6 ドキュメント

bisectは二分探索のためのモジュールです。 ですがよくある使い方とは違いますね。

この場合、score(例えば89)がbreakpointsのどこに入るかを探します。 そうしてiには3が入り、grades[3]、すなわちBが結果に出る、と。

条件分岐を一度も使わない書き方がスマートですね。

Play ストアで有料アプリが買えない日々が続いている

先日からGoogle Playストアで有料アプリを購入しようとすると、クレジットカード(正確にはVプリカ)もキャリア支払いもPayPalも全ての方法でエラーになる。

f:id:mo_san:20150705024244p:plain:w320

Playストアで購入が出来なくなることは、私だけでなくけっこう多くの人に起きているようだ。
だが私のような事例は珍しいのではないか。急場しのぎで、新しくGoogleアカウントを作ってそれでスマホにログインし、その状態で有料アプリを購入すると、その日だけはなんとか買えた。
しかし次の日からはまた同じだ。なのでどうしたものかと悩んでいたところ…


「お客様の Google ウォレット アカウント」という件名で以下の内容のメールが来た。 From: wallet-support@google.com である。

Google ウォレットをご利用のお客様

お客様の最近のアカウント情報の登録または更新時に、Google ウォレット アカウントの情報を確認できなかったため、このメールをお送りしています。そのため、お客様のアカウントを一時的に停止させていただきましたので、 現在 Google ウォレットを使用してご注文することはできません。

Google ウォレットは、Google サービス(Google PlayYouTubeGoogle ドライブなど)や多くの販売者のサイトやアプリでご利用いただけます。Google は、お客様の情報の保護と Google ウォレットのセキュリティに細心の注意を払っています。

アカウントの停止を解除するには、以下のフォームにご記入ください。 https://support.google.com/wallet/contact/account_verification

アカウントの安全性を確保し、Google ウォレットが閉鎖しないようにするには、必要なドキュメントをご提出ください。

よろしくお願いいたします。 Google ウォレット チーム

ふむ。リンク先を見てみると、

  • 請求先住所が記載された書類
  • 政府機関発行の運転免許証、身分証明カード、パスポート情報のページ

を提出するように書かれている。
ここで素直に差し出すのは少し怖い気もするのだが、この状態が続くのは面倒なので、腹をくくって情報を晒したほうが良いのだろうか。
冷静に考える意味も込めてこのエントリーを書いている。