Last active
December 25, 2018 03:09
-
-
Save chizuchizu/bb4f067beaabc80e7c64bf461f36c095 to your computer and use it in GitHub Desktop.
百人一首の練習用ソフトです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import tkinter as tk | |
import tkinter.ttk as ttk | |
import pandas as pd | |
import random | |
import sys | |
from tkinter import messagebox | |
import datetime | |
import csv | |
class App(ttk.Frame): | |
def __init__(self, app): | |
super().__init__(app) | |
self.pack() | |
self.i = 0 # 間違えた回数のカウント | |
self.k = 0 # 問題数 | |
# 問題のラベル | |
self.var = tk.StringVar() # ラベル更新用 | |
self.var.set("") | |
# ラベルの表示 | |
self.label = tk.Label(textvariable=self.var, font=("", 50, "bold")) | |
self.label.place(x=50, y=70) | |
# n問目の表示 | |
self.n = tk.StringVar() | |
self.n.set("1問目") | |
self.n_lr = tk.Label(textvariable=self.n, font=("", 20, "bold")) | |
self.n_lr.place(x=0, y=0) | |
# 正解のラベル | |
self.correct = tk.StringVar() | |
self.correct.set("") | |
self.co_label = tk.Label(textvariable=self.correct, font=("", 80, "bold"), fg="#FF0000") | |
self.co_label.place(x=100, y=350) | |
# 不正解のラベル | |
self.incorrect = tk.StringVar() | |
self.incorrect.set("") | |
self.inc_label = tk.Label(textvariable=self.incorrect, font=("", 80, "bold"), fg="#0000FF") | |
self.inc_label.place(x=50, y=350) | |
# 前の問題の答えのラベル | |
self.num = tk.StringVar() | |
self.num.set("") | |
self.num_label = tk.Label(textvariable=self.num, font=("", 15)) | |
self.num_label.place(x=50, y=300) | |
# 入力ボタン | |
self.btn = tk.Button(text="入力(Enter)", command=self.decision, width=50) | |
self.btn.place(x=80, y=250) | |
# 終了ボタン | |
self.fin_btn = tk.Button(text="終了", command=self.fin) | |
self.fin_btn.place(x=450, y=450) | |
self.box = ttk.Entry(width=50) # 入力ボックス | |
self.box.place(x=80, y=200) | |
self.box.bind("<Return>", self.decision) | |
self.chance = 2 # 答えられる回数 | |
# 上の句、下の句を初期化 | |
self.up = None | |
self.under = None | |
# データの読み込み | |
self.df = pd.read_csv("uta.csv") | |
self.uta = [(up, under) for up, under in zip(self.df["上"], self.df["下"])] | |
# セーブ用データ | |
self.times = [0] * 100 # 出題問題数 | |
self.miss = [0] * 100 # 間違えた問題 | |
# 問題番号を初期化 | |
self.o = None | |
# 1問目を表示 | |
self.question() | |
def fin(self): | |
"""終了""" | |
# 本当に終了するか確認 | |
ret = messagebox.askyesno('確認', 'ウィンドウを閉じますか?') | |
if ret: | |
# Saveするか確認 | |
save_yn = messagebox.askyesno("Save", "セーブしますか?") | |
if save_yn: | |
self.save() | |
print("セーブします") | |
# 画面とプログラムの終了 | |
self.quit() | |
sys.exit() | |
def save(self): | |
"""問題数、間違えた回数をcsvファイルに保存""" | |
# 日付を取得 | |
date = datetime.date.today() | |
date.isoformat() | |
# 日付を追加 | |
self.miss.insert(0, date) | |
self.times.insert(0, date) | |
# 間違えた回数を保存 | |
with open('miss_save.csv', 'a', newline='') as f: | |
writer = csv.writer(f) # 行末は改行 | |
writer.writerow(self.miss) | |
# 問題数を保存 | |
with open("times_save.csv", "a", newline="") as f: | |
writer = csv.writer(f) | |
writer.writerow(self.times) | |
def question(self): | |
"""問題作成""" | |
self.k += 1 | |
# 前の問題の答え表示 | |
set_label = str(self.up) + "の答えは" + str(self.under) + "でした。" | |
# 問題数、(正解数)/(解いた問題数) | |
num_label = str(self.k) + "問目 " + str(sum(self.times) - sum(self.miss)) + "/" + str(sum(self.times)) | |
self.num.set(set_label) | |
self.n.set(num_label) | |
self.i = 0 # 答える回数を初期化 | |
self.o = random.randint(0, 15) # 問題番号生成 | |
self.up, self.under = self.uta[self.o] # 上の句と下の句 | |
self.var.set(self.up) # 問題の上の句のラベルに更新 | |
self.times[self.o] += 1 # 問題数をカウント | |
def over(self): | |
"""回数オーバーか判定""" | |
if self.i == self.chance: | |
print("回数オーバーです") | |
self.miss[self.o] += 1 | |
return True | |
else: | |
return False | |
def decision(self, event=0): # eventは使わない | |
"""正解か不正解か判定""" | |
ans = self.box.get() | |
self.box.delete(0, tk.END) | |
self.i += 1 | |
# 正誤判定 | |
if ans == self.under: | |
self.incorrect.set("") | |
self.correct.set("正解!!!") | |
print("正解") | |
self.question() | |
else: | |
self.correct.set("") | |
self.incorrect.set("不正解…") | |
print("不正解") | |
pass | |
if self.over(): # 回数オーバーしているか判定 | |
self.question() | |
if __name__ == "__main__": | |
app = tk.Tk() | |
app.geometry("500x500") | |
app.title("チズチズの百人一首トレーニング") | |
frame = App(app) # クラス呼び出し | |
app.mainloop() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import random | |
from itertools import count | |
import datetime | |
import pandas as pd | |
import csv | |
def load(): | |
df = pd.read_csv("uta.csv") | |
uta = [(ue, sita) for ue, sita in zip(df["上"], df["下"])] | |
return uta | |
def save(miss, times): | |
date = datetime.date.today() | |
date.isoformat() | |
miss.insert(0, date) | |
times.insert(0, date) | |
with open('miss_save.csv', 'a', newline='') as f: | |
writer = csv.writer(f) # 行末は改行 | |
writer.writerow(miss) | |
with open("times_save.csv", "a", newline="") as f: | |
writer = csv.writer(f) | |
writer.writerow(times) | |
print("またね!") | |
def question(n, uta, miss, times, chance=1): | |
ut_len = len(uta) | |
o = random.randint(0, ut_len - 1) | |
times[o] += 1 | |
ue, sita = uta[o] | |
print("【", n, "問目】上の句は", ue) | |
for i in range(chance)[::-1]: | |
ans = input("下の句は? ") | |
if ans == "end": | |
save(miss, times) | |
return "end" | |
if ans == sita: | |
print("正解です!\n") | |
return "正解" | |
if i > 0: | |
print("不正解です…\n") | |
print("後", i, "回チャンスを与えます") | |
print("下の句の一文字目は", sita[0]) | |
print(len(ue), "文字です。") | |
if i == 0: | |
"""a = miss[o] | |
a += 1 | |
miss[o] = a""" | |
miss[o] += 1 | |
print("不正解です\n") | |
print(ue, "の正解は", sita, "でした。\n") | |
return "不正解" | |
def main(): | |
print("【チズチズの決まり字特訓】\n") | |
print("【ルール】") | |
print("上の句(決まり字)を詠むので、下の句の決まり字を答えて下さい。") | |
print("辞めたかったら「end」って言ってね!\n") | |
miss = [0] * 100 | |
times = [0] * 100 | |
uta_len = slice(0, 15) | |
uta = load()[uta_len] | |
for uta_le in count(1): | |
if question(uta_le, uta, miss, times) == "end": | |
return | |
if __name__ == "__main__": | |
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Id | 上 | 下 | |
---|---|---|---|
1 | む | き | |
2 | す | ゆめ | |
3 | め | くもか | |
4 | ふ | むへ | |
5 | さ | いつこ | |
6 | ほ | たた | |
7 | せ | われ | |
8 | うか | はけ | |
9 | うら | こひに | |
10 | うき | わかみひ | |
11 | つく | こひそ | |
12 | しの | もの | |
13 | しら | つ | |
14 | もも | なほあ | |
15 | もろ | はなよ | |
16 | ゆう | あし | |
17 | ゆら | ゆく | |
18 | いに | けふこ | |
19 | いまこ | あり | |
20 | いまは | ひとつ | |
21 | ちぎりお | あはれ | |
22 | ちぎりき | す | |
23 | ちは | から | |
24 | ひさ | しつ | |
25 | ひとは | はなそ | |
26 | ひとも | よをお | |
27 | きみがためお | なかく | |
28 | きみがためは | わかころもてに | |
29 | きり | ころもか | |
30 | はなさ | ふり | |
31 | はなの | わかみよ | |
32 | はるす | ころもほ | |
33 | はるの | かひ | |
34 | やえ | ひとこそみ | |
35 | やす | かた | |
36 | やまが | なかれ | |
37 | やまざ | ひとめ | |
38 | よのなかは | あまの | |
39 | よのなかよ | やま | |
40 | よも | ね | |
41 | よを | よに | |
42 | かく | さ | |
43 | かさ | しろ | |
44 | かぜそ | みそ | |
45 | かぜを | くた | |
46 | みかき | ひる | |
47 | みかの | いつみ | |
48 | みせ | ぬ | |
49 | みち | みたれそ | |
50 | みよ | ふる | |
51 | たか | と | |
52 | たき | なこ | |
53 | たご | ふし | |
54 | たち | まつと | |
55 | たま | しの | |
56 | たれ | まつも | |
57 | こい | ひとし | |
58 | こころあ | お | |
59 | こころに | こひし | |
60 | こぬ | やく | |
61 | この | もみ | |
62 | これ | しる | |
63 | おおえ | また | |
64 | おおけ | わかた | |
65 | おおこ | ひとを | |
66 | おく | こゑ | |
67 | おぐ | いまひとたひのみ | |
68 | おと | かけ | |
69 | おも | うき | |
70 | わがい | よをう | |
71 | わがそ | ひとこそし | |
72 | わすら | ひとの | |
73 | わすれ | けふを | |
74 | わたのはらこ | くもゐ | |
75 | わたのはらや | ひとには | |
76 | わび | みをつくしても | |
77 | ながか | みたれて | |
78 | ながら | うし | |
79 | なげき | いか | |
80 | なげけ | かこ | |
81 | なつ | くもの | |
82 | なにし | ひとにし | |
83 | なにわえ | みをつくしてや | |
84 | なにわが | あはて | |
85 | あい | むか | |
86 | あきか | もれ | |
87 | あきの | わかころもては | |
88 | あけ | なほう | |
89 | あさじ | あまり | |
90 | あさぼらけあ | よし | |
91 | あさぼらけう | あら | |
92 | あし | なかな | |
93 | あまつ | を | |
94 | あまの | みか | |
95 | あらざ | いまひとたひのあ | |
96 | あらし | たつ | |
97 | ありあ | あか | |
98 | ありま | いて | |
99 | あわじ | いく | |
100 | あわれ | みの |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
詳しいことは https://chizuchizu.com/2018/12/18/pythonと共に百人一首で勝つ!!/
こちらに書いてあります。