kakashi-blog・カカシブログ・

Python備忘録を書きドローンやバイクなど好きな事で生きて行こうとしているブログ

python プログラミング 未分類

子供がズルをするので計算カードをpython(Tkinter)で作った

投稿日:2020年10月6日 更新日:

うちの小学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, プログラミング, 未分類
-

執筆者:


  1. […] 以前作った引き算アプリ「子供がズルをするので計算カードをpython(Tkinter)で作った」 […]

comment

メールアドレスが公開されることはありません。

関連記事

no image

ノートパソコンの選び方、どう選べばいいかわからない(初心者向け)

結論から言います。 下のAmazonサイトで販売している¥74,000のノートパソコンを買いましょう HP ノートパソコン HP 14s-dk1000 14インチ フルHD ブライトビュー IPSディ …

Python備忘録 Tkinter編② テキスト入力とボタン

前回はラベルの挿入まで行いました 今回はテキスト入力とボタンについて記述します       1、ベースのウィンドウを作る    win=tk.Tk() win.title(‘text input &a …

Floki Inu (Token) の買い方 PancakeSwap

   Floki inu の説明は、いろいろなサイトで紹介されていて、主にオフィシャルサイトを見ることをお勧めします。ので、ここでは簡単に購入する方法&つまずきそうな所の説明をします。 Pancake …

サラリーマンが株取引で利益、損益を出した時の確定申告のやり方(初めての方)

  一般的にサラリーマンはあまり確定申告をすることはありませんが、今回はそんなサラリーマンが株取引で利益、損益をだした時に確定申告をする事を想定して記事を書きます。   まず株の取引きをする場合、通常 …

ソフトバンクからワイモバイルにiPhoneで乗り換える方法(MNP)

現在iPhone7を使用中、番号そのまま(MNP)ソフトバンクからワイモバイルに乗り換えたので自分なりにまとめます。   何から始めればいいのか 結構大事なことだけど、あまり書かれていないので書いてお …