LoginSignup
3
1

More than 5 years have passed since last update.

Pythonと共に百人一首で勝ちたい

Posted at

SnapCrab_NoName_2018-12-18_19-1-5_No-00.png

はじめに

皆さん!
百人一首をやったことがありますか?
学校の授業で百人一首をやったときに覚えておきたいですよね!
(冬休みの課題で覚えろって言われた僕

しかし…
覚えられないんです! どうしても…

どうやって覚える?

https://www.excd.jp/fuda/kimariji.html
このサイトには決まり字について書かれています。

ひらめいた!!!

これをセットで一問一答形式でやりまくれば…
百人一首の名人になれるのでは?

そこで、Pythonを使って問題を出してもらい答えてもらうコードを書くことにしました。

下のブログにも詳細が載ってあります。

ブログ

このソフトの目的

問題は決まり字のみなので、声を聞いたらすぐ札を取れるようにする練習です。
覚えることを最小限にさせて、なおかつ実践的にしました。

大まかな処理

上の句を詠んでもらう

下の句を答える

合ってたら… 次の問題

間違ってたら… もう1度(最初の文字のヒントを出す

コード

import random
import pandas as pd


def load():
    return pd.read_csv("百人一首.csv")


def loop(simo, kami):
    while True:

        n = random.randint(0, 99)  # 詠む番号を決める
        i = 0

        while True:
            j = 1
            simo_n = simo[n]
            kami_n = kami[n]

            print("【", j, "問目】下の句は", simo_n, "\n")

            s = input()
            if s == "end":  # endは終了
                break

            if kami_n == s:  # 正解ならもう次のループ
                print("正解です!\n")
                break
            else:
                print("不正解です…")
                while i < 3:
                    print("後2回チャンスを与えます")
                    if len(kami_n) != 1:
                        print("上の句の一文字目は", kami_n[0])

                    s = input()
                    if s == "end":
                        break
                    if kami_n == s:
                        print("正解です")
                        break
                    else:
                        print("不正解です")
                        if i == 2:
                            print("正解は", kami_n)
                    i += 1
                break

        j += 1
        if s == "end":
            break

def main():
    df = load()  # データの読み込み

    kami = df["上"]
    simo = df["下"]

    # ルール説明
    print("【チズチズの決まり字特訓】\n")
    print("【ルール】")
    print("下の句(決まり字)を詠むので、上の句の決まり字を答えて下さい。")
    print("辞めたかったら「end」って言ってね!\n")

    loop(simo, kami)


if __name__ == "__main__":
    main() # 実行

百人一首.csvとさっきのコードの更新履歴等は下のGitHubにて公開しています。
GitHub

使い方

変数kを指定することで、何枚の札から問題を出すか変えられます。

例えば 最初は5を選択して6枚の札… 次は 10を選択して11枚の札…

つまり…

自分のレベルに合わせて暗記できる!!

今後

GUI化させたり、ウェブアプリケーション化させてみたいです。

加えて、スコア機能の実装や保存機能等も追加していきたいです!

ゲームっぽくさせて覚えやすく!

まとめ

初めて作った自作ソフトだが、結構便利で覚えやすかったから重宝していきます。
オブジェクト指向を理解しているようで、実装できなかったためクラスを追加させたり色々やってみたいです。

アドバイス欲しいのでコメント下さい。

3
1
3

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
3
1