##はじめに
こんにちは!Life is Tech! Tokai Mentors Advent Calendar 2018の6日目の記事はわだどんが書かせていただきます。
突然ですがみなさん...漫才は好きですか?
諸々の導入はぶっ飛ばしますが、今回の記事でジャルジャルさんを愛してやまない筆者が実装するのは**「国名分けっこ」**です。
「国名分けっこ」とは
「国名分けっこ」を知らない...?
もしかして「分けっこ国名」って言ってました?
※「国名分けっこ」を知らないそこのあなたはこちらのネタ動画を見てからこの記事を読み進めることをオススメします。
ゲーム進行(ざっくり)
- 福徳さんが国名を任意の位置までぶった切って言う
- 後藤さんが残りの国名を返す
実際はリズムに合わせてのやりとりが面白いんですが今回はその辺は実装しません。制限時間とかつけたらいい感じにできるはずです。知らんけど。
実装する処理の流れ
- 国名を途中まで出力
- プレイヤーが答えを入力
- 正解なら「ええやん!」不正解なら「全然あかんやん!」と出力
実装
国名をランダムに取得する
class CountryModel:
def __init__(self):
self.countries = [('アルゼンチン',17),('インドネシア',17),('イタリア',5),('オーストラリア',4),('ニッポン',3),('チュウゴク',3),('ドイツ',2),('モンゴル',2),('エジプト',2),('カナダ',2),('ギリシャ',2),('ブラジル',2),('アメリカ',1),('イギリス',1),('カンコク',1)]
def get_prob_sum(self):
prob_sum = 0
for c in self.countries:
prob_sum += c[1]
return prob_sum
def get_country(self):
rand = random.randint(0,self.get_prob_sum()-1)
count = 0
prob = 0
while True:
prob = self.countries[count][1]
rand -= prob
if rand<=0:
break
count+=1
return self.countries[count][0]
コンストラクタではself.countries
に('国名',重み)
となるタプルを格納しています。
重みはM-1の時のネタでの出現数を手動で数えました。
get_prob_sum()
で出現率の合計を算出し、get_country()
で重みとかを計算した後に国名を返します。
コードを見てもわかる通りアルゼンチンとインドネシアが圧倒的に出やすいです。
国名をぶった切ったり答えのチェックしたり
class TextModel:
def chop_text(self,text):
length = len(text)
rand = random.randint(1,length-1)
return text[0:rand]
def check(self,question,answer,countries):
answer = question+answer
for c in countries:
if c[0] == answer:
print('ええやん!')
return
print('全然あかんやん!')
return
本当はsplit()
とかで任意の位置での切り分けができればよかったんですが、区切り文字が存在しなかったのでムリっぽいですね。
chop_text()
はランダムな位置で文字列を2つにぶった切って先頭側の方を返してくれます。
check()
はその名の通り答えがあっているかどうかのチェックをしています。
動作
ええやん!
ソースコード
ソースコードはこちら
感想
国名の出現数を数えるところが1番きつかったです。
頭おかしなるわこれ!!