うちの小学1年生の子の宿題に「計算カード」があります。
学校からは、「時間を計ってやりなさい」と言われているようです。
もちろん計算なんかせず、めくる事が目的になって、
どれだけ早くめくれるか。みたいな事になってしまっています。
まあそうなるよね。
妻は我慢できないようなので作ってみました。
今回作ったのは、
くり下がりのない一けたの引き算
マイナスにはならない物だけの組み合わせ(55通りかな)
それをランダムに出題
最後に、
かかった時間
点数(正解率)
間違った問題
を表示するようになっています。
コード
import tkinter as tk
from tkinter import messagebox
from functools import partial
import numpy as np
import time
root = tk.Tk()
root.attributes("-topmost", True)
messagebox.showinfo('', 'はじめ!')
root.destroy()
q1=[0,1,2,3,4,5,6,7,8,9]
q2=[0,1,2,3,4,5,6,7,8,9]
q1=np.array(q1)
q2=np.array(q2)
ran=[]
for i in q1:
for ii in q2:
if i-ii>=0:
ran.append([i,ii])
ran=np.array(ran)
p=np.random.permutation(int(len(ran)))#シャッフル
ran=ran[p]
seikai=0
hazure=[]
def ans(a,i,ii):
b=i-ii
if a==b:
messagebox.showinfo('', 'せいかい!')
global seikai
seikai+=1
win.destroy()
else:
messagebox.showinfo('', 'ざんねん せいかいは{}です'.format(b))
global hazure
hazure.append(['{0}-{1}'.format(i,ii)])
win.destroy()
def but(i,ii):
global win
win=tk.Tk()
win.attributes("-topmost", True)#常に画面の最前に表示
win.title('ひきざんチャレンジ!')
win.geometry('500x350+100+200')
label=tk.Label(text='{0}-{1} ='.format(i,ii),font=("",30))
label.pack()
button=tk.Button(win,text='0',command=partial(ans,0,i,ii),width=10)
button.pack(fill = 'none', padx=10,side = 'top')
button=tk.Button(win,text='1',command=partial(ans,1,i,ii),width=10)
button.pack(fill = 'none', padx=10,side = 'top')
button=tk.Button(win,text='2',command=partial(ans,2,i,ii),width=10)
button.pack(fill = 'none', padx=10,side = 'top')
button=tk.Button(win,text='3',command=partial(ans,3,i,ii),width=10)
button.pack(fill = 'none', padx=10,side = 'top')
button=tk.Button(win,text='4',command=partial(ans,4,i,ii),width=10)
button.pack(fill = 'none', padx=10,side = 'top')
button=tk.Button(win,text='5',command=partial(ans,5,i,ii),width=10)
button.pack(fill = 'none', padx=10,side = 'top')
button=tk.Button(win,text='6',command=partial(ans,6,i,ii),width=10)
button.pack(fill = 'none', padx=10,side = 'top')
button=tk.Button(win,text='7',command=partial(ans,7,i,ii),width=10)
button.pack(fill = 'none', padx=10,side = 'top')
button=tk.Button(win,text='8',command=partial(ans,8,i,ii),width=10)
button.pack(fill = 'none', padx=10,side = 'top')
button=tk.Button(win,text='9',command=partial(ans,9,i,ii),width=10)
button.pack(fill = 'none', padx=10,side = 'top')
win.mainloop()
start = time.time()
for i in ran:
but(i[0],i[1])
stop =time.time()
result = stop -start
x=int(result)//60
y=int(result)%60
rp= tk.Tk()
rp.attributes("-topmost", True)
rp.geometry('300x600+100+50')
label0=tk.Label(text='{}ふん{}びょう'.format(x,y),font=("",30))
label0.pack()
label00=tk.Label(text='てんすう{}てん'.format(int(100*seikai/(seikai+len(hazure)))),font=("",30))
label00.pack()
if len(hazure)==0:
label1=tk.Label(text='ぜんもんせいかい!',font=("",30))
label1.pack()
else:
label2=tk.Label(text='にがてなものは',font=("",30))
label2.pack()
for h in hazure:
label3=tk.Label(text=h,font=("",20))
label3.pack()
label4=tk.Label(text='です、がんばりましょう!',font=("",20))
label4.pack()
messagebox.showinfo('', 'おわり')
rp.destroy()
変数がかぶってたり、汚いコードだけどとりあえず動きます。
まず、OKボタンでスタート、ストップウォッチも同時に動き出します。
正解ボタンを押せば「せいかい!」
OKボタンを押して次に行きます
間違ったボタンを押したら
「ざんねん せいかいは**です」と表示
最後まで計算したら時間と正解率、
間違った問題が表示
おわりボタンでおしまい。
あまりのある割り算アプリ
「pythonのtkinterを使って、あまりのある割り算アプリを作ってみた」
[…] 以前作った引き算アプリ「子供がズルをするので計算カードをpython(Tkinter)で作った」 […]