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

fxの1分足を10分足に変換するpythonプログラム

今月一度もブログ更新出来ていなかったので日付が変わる前に更新しようと思います   バックテストを行うためにネット上でヒストリカルデータを探していた所、 FOREX TESTERというサイトに漂着 FO …

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

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

Excel VBAを使用して、セルの中の図形をコピーして別のセルにペースト

  実はVBAは使用せずに、関数だけでコピペをしようと思いましたが、なかなか上手くいきませんでした。 なのであきらめてVBAで作ります。   目的   順序がバラバラのセルに番号をふって、別のシートに …

Amazonはスクレイピングが禁止。seleniumでデータ収集をしてみた

pythonでコードを書いて、AmazonのサイトからASINコードと金額のデータを、普通にスクレイピングしてみたけど出来なかった。(バグだと思って何時間も無駄にした) どうやらAmazonのサイトは …

Python備忘録 Tkinter編① 

Tkinterとは キーボード操作だけでなく、 マウスを使用した操作が可能なウィンドウやボタン、入力欄など GUI を比較的簡単に 作る事が出来るライブラリ   退屈なことはPythonにやらせよう …