インフラ屋としてシェル芸勉強中の身ですが、こんなtweetが流れてきました。
このtweetを見てなぜかこれを思い出したので、
(FF13ですよね。未プレイですが)
この文をpythonでやってみようと思ったのがこちら。
ちなみに2点候補があるようですが私は未プレイのため個人的に語感のいい1を正解とします。
#! 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%でしょうか。
とは書いたものの、未プレイのためどの文章が本当は正しいかわかりません...
参考サイト
シェルだとこちら
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]$