paloma blog

NWエンジニアやってます。技術の備忘など。Pythonもちょっと。タイトルは好きなカクテルから。

パルスのファルシのルシがコクーンでパージをランダムで展開する

インフラ屋としてシェル芸勉強中の身ですが、こんなtweetが流れてきました。

f:id:paloma69:20171223112858p:plain

このtweetを見てなぜかこれを思い出したので、
(FF13ですよね。未プレイですが)

dic.nicovideo.jp

この文をpythonでやってみようと思ったのがこちら。

ちなみに2点候補があるようですが私は未プレイのため個人的に語感のいい1を正解とします。

  1. パルスのファルシのルシがコクーンでパージ
  2. パルスのファルシのルシがパージでコクーン
#! python3

import random

pulse = ['パルス', 'ファルシ', 'ルシ', 'パージ', 'コクーン']

shuffle = random.sample(pulse, 5)

print('{0}の{1}の{2}が{3}で{4}'.format(*shuffle))

やりたいこと

  • 文字列のリストをシャッフルして出力する
  • 文字列の重複はしない

シャッフルはrandomモジュールを使用します。
シャッフルしたリストを返してほしいのでsample関数を使用します。
(shuffle関数だと一回シャッフルするだけなので、値は返らない)

また、最後のリストを展開する際に前に*をつけないとエラーになるようです。

>>> print('{0}の{1}の{2}が{3}で{4}'.format(shuffle))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range # これは後で調べる

実行してみる

環境はfedora python classroom の vagrant版です。

(python3) [vagrant@localhost vagrant]$ python FF13.py
パージのコクーンのファルシがパルスでルシ

できました!
シャッフル率ってどのくらいなんですかねえ。
試しに20回ほど回してみます。

(python3) [vagrant@localhost vagrant]$ for a in {1..20} ; do python FF13.py ; done
パージのルシのパルスがコクーンでファルシ
ルシのコクーンのパージがファルシでパルス
パルスのファルシのルシがコクーンでパージ  # 正解
パルスのパージのコクーンがファルシでルシ
パージのファルシのルシがコクーンでパルス
パルスのコクーンのファルシがパージでルシ
コクーンのパルスのファルシがパージでルシ
ルシのパルスのコクーンがファルシでパージ
パルスのルシのパージがコクーンでファルシ
ルシのコクーンのファルシがパルスでパージ
コクーンのルシのファルシがパージでパルス
ルシのファルシのコクーンがパージでパルス
パージのコクーンのパルスがファルシでルシ
ルシのファルシのコクーンがパージでパルス
パージのコクーンのルシがファルシでパルス
パージのファルシのルシがパルスでコクーン
ファルシのパルスのルシがパージでコクーン
パルスのルシのファルシがパージでコクーン
ルシのコクーンのファルシがパルスでパージ
ルシのコクーンのパルスがパージでファルシ
(python3) [vagrant@localhost vagrant]$

一回でてきましたね。 1/20だから正解率は5%でしょうか。

とは書いたものの、未プレイのためどの文章が本当は正しいかわかりません...

参考サイト

qiita.com

シェルだとこちら

echo "パルス,ファルシ,ルシ,コクーン,パージ"  \
  | tr "," "\n" | sort -R | tr "\n" " " | awk '{print $1"の"$2"の"$3"が"$4"で"$5}'
(python3) [vagrant@localhost vagrant]$ echo "パルス,ファルシ,ルシ,コクーン,パージ"  \
>   | tr "," "\n" | sort -R | tr "\n" " " | awk '{print $1"の"$2"の"$3"が"$4"で"$5}'
パルスのパージのファルシがコクーンでルシ
(python3) [vagrant@localhost vagrant]$

上と同じ仕組みですが、寿司バージョン

echo "寿司,ご飯,魚,神" \
| tr "," "\n" | sort -R | tr "\n" " " | awk '{print $1"は"$2"の上に"$3"が乗ってるから"$4}'
(python3) [vagrant@localhost vagrant]$ 
ご飯は魚の上に寿司が乗ってるから神
(python3) [vagrant@localhost vagrant]$