1
1

モグライダー「さそり座の女」

Last updated at Posted at 2024-01-26

はじめに

M-1で実装できそうなネタを教えてもらったので書きました。

3人とも可愛い
https://x.com/mgrd33/status/1481212541582049286?s=20

ともしげの初期コード

import random

zodiac_list = ["牡羊座", "牡牛座", "双子座", "蟹座", "獅子座", "乙女座", "天秤座", "蠍座", "射手座", "山羊座", "水瓶座", "魚座"]
gender_list = ["", "", "その他", "回答しない"]

def mikawa():
    while True:
        zodiac = random.choice(zodiac_list)
        gender = random.choice(gender_list)

        if zodiac == "蠍座" and gender == "":
            print(f"モグライダー「{zodiac}{gender}ですか?」美川さん「そうよ、私は{zodiac}{gender}~♡」")
            break  # 条件を満たしたらループを終了
        else:
            print(f"モグライダー「{zodiac}{gender}ですか?」美川さん「いいえ」")

# 関数を実行
mikawa()

出力例

モグライダー山羊座の男ですか?」美川さんいいえ
モグライダー獅子座のその他ですか?」美川さんいいえ
モグライダー水瓶座のその他ですか?」美川さんいいえ
...
モグライダー蠍座の女ですか?」美川さんそうよ私は蠍座の女~♡」

最悪47(12×4-1)回「いいえ」と答えさせられる美川さんが大変気の毒である。

芝さんのコードレビュー後

def mikawa(z, g):
    for zodiac in zodiac_list:
        if zodiac == "さそり座":
            print(f"モグライダー「{zodiac}ですか?」美川さん「コクリ」")
            for gender in gender_list:
                if gender == "":
                    print(f"モグライダー「{zodiac}{gender}ですか?」美川さん「そうよ、私はさそり座の女~♡」")
                    break
                else:
                   print(f"モグライダー「{zodiac}{gender}ですか?」美川さん「惜しい、私はさそり座の女~♡」")
        else:
            print(f"モグライダー「{zodiac}ですか?」美川さん「いいえ」")


print(mikawa(zodiac, gender))

出力

モグライダー「牡羊座ですか?」美川さん「いいえ」
モグライダー「牡牛座ですか?」美川さん「いいえ」
モグライダー「双子座ですか?」美川さん「いいえ」
モグライダー「かに座ですか?」美川さん「いいえ」
モグライダー「獅子座ですか?」美川さん「いいえ」
モグライダー「乙女座ですか?」美川さん「いいえ」
モグライダー「さそり座ですか?」美川さん「コクリ」
モグライダー「さそり座の女ですか?」美川さん「そうよ、私はさそり座の女~♡」

芝さんのコードレビューにより、美川さんが「いいえ」と回答する回数を、最大47回から7回までに減らすことができました。

感想

確かに、美川さんは太陽星座×月星座×ASCまで当てて欲しいかもしれないし、性別が2種類だけしかない時代でもないので、最適性を損なわずに計算量を落とすことは大事だなと学びました。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1