kakashi-blog・カカシブログ・

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

python やってみた プログラミング 未分類

pythonのtkinterを使って、あまりのある割り算アプリを作ってみた

投稿日:

小3の娘に、あまりのある割り算の問題を出してほしいとたのまれたので、
Windowsで動くアプリを作ってみました。


退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

 

前提条件

・2けた ÷ 1けた
・答えは1けた
・小学生でも使えるように実行ファイルにしておく
・キーボードは使わない(マウス操作のみ)

ざっくりこんな感じで作って行きたいと思います。

 

コード


import tkinter as tk
from tkinter import messagebox
import numpy as np
import time
import random

root = tk.Tk()
root.attributes("-topmost", True)
messagebox.showinfo('', 'はじめ!')
root.destroy()

q1,n,hazure,q2=[],[],[],[2,3,4,5,6,7,8,9]
ran,seikai,c=10,0,0

for i in range(10,100):
    q1.append(i)

for ii in q1:
    for iii in q2:
        if ii%iii!=0:
            if ii//iii<10:
                n.append([ii,iii])

random.shuffle(n)

def sub(nn,a,b):
    global c
    if c==0:
        global k
        k=nn
        c+=1
        global win
        win.destroy()
        but(a,b,st,nn)      
    else:      
        c=0
        kaito(a,b,k,nn)
        
def kaito(a,b,k,nn):
    if a//b==k:
        if a%b==nn:
            messagebox.showinfo('', 'せいかい!')
            global seikai
            seikai+=1
            global win
            win.destroy()          
        else:
            msg(a,b)         
    else:
        msg(a,b)
        
def msg(a,b):        
    messagebox.showinfo('', 'ざんねん せいかいは{}あまり{}です'.format(a//b,a%b))
    global hazure
    hazure.append(['{0}÷{1}'.format(a,b)])
    global win
    win.destroy()

def but(a,b,f,sq):
    global win
    win=tk.Tk()
    win.attributes("-topmost", True)#常に画面の最前に表示
    win.title('あまりのあるわりざんチャレンジ!')
    win.geometry('800x350+100+200')
    label=tk.Label(text='{0}÷{1} ={3}あまり☆ \n※{2}にはいる数字のボタンを押そう'.format(a,b,f,sq),font=("",30))
    label.pack()
    for i in range(1,10):
        button=tk.Button(win,text='{}'.format(i),command=partial(sub,i,a,b),width=10)
        button.pack(fill = 'none', padx=10,side = 'top')
    win.mainloop()
    
sq,st='□','次に☆'
start = time.time()
for i in range(ran):
    but(n[i][0],n[i][1],sq,sq)
stop =time.time()
result = stop -start
x=int(result)//60
y=int(result)%60
rp= tk.Tk()
rp.attributes("-topmost", True)
rp.geometry('400x600+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()

 

動かしてみる

メッセージBOXの「OK」を押すと、時間のカウントと共に問題が出題されていく

まずは四角に入る数字を選択(ここで間違えても、あまりを入れないと答え合わせにはならない)

次にあまりの数を選択
正解なら

間違いなら

とこんな感じ

10問終わったら

かかった時間と、間違った問題が表示される。

 

実行ファイル化(exe化)

ダブルクリックだけで動くようにするため、実行ファイルにしておきます。

コマンドプロンプト上で、「pyinstaller ファイル名」

これだけで実行ファイルに変換できます。

出来上がった「dist」ファイルの中に

こんな実行ファイル(.exe)があるので、

これをダブルクリックすればファイルが実行されます。

場所を移すときは「dist」ファイルごと動かさないと、パスが崩れます。

 

使いずらいと娘には言われていますが、
宿題の自主勉にはつかってくれているので◎

一度答えを選択してしまうと修正できないなど、
改善点は多数ありますが、まぁすぐに使わなくなってしまうと思うので、
これ以上時間はかけません。

 


独学プログラマー Python言語の基本から仕事のやり方まで

 

以上終わり

また計算問題をたのまれたら作ろうと思います。

 

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

-python, やってみた, プログラミング, 未分類
-, , , ,

執筆者:


  1. […] あまりのある割り算アプリ「pythonのtkinterを使って、あまりのある割り算アプリを作ってみた」 […]

子供がズルをするので計算カードをpython(Tkinter)で作った | kakashi-blog・カカシブログ・ へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

ナイスハッシュのmining payment毎に、レートを自動で取得(python)

マイニングを始めると、どのタイミングのレートで確定申告しようかと考えると思います。 ググると結構皆さん独自で考えて行っているのが現状ですかね。 ひと月にまとめている人、円に換えたタイミングの人・・・結 …

no image

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

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

Pythonプログラミング備忘録 ―エクセル操作編

pytohnプログラミング学習で勉強したことをまとめました 備忘録といった感じで、初心者向けに書いてあります   退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミ …

ネム(XEM)保有で Symbol(XYM)ゲット!価格は?

現状 2021.3.12にスナップショットが行われ、symbol(XYM)(以後「ジム」)の配布を待っている状態。 私はコインチェックにて、ネム(XEM)(以後「ゼム」)をスナップショット以前から約5 …

Amazonのウェブスクレイピングが出来ない

  pythonでプログラミングを勉強(というより趣味で遊んでいる)しています。     BeautifulSoupを使用して、ウェブスクレイピングがある程度出来るようになってきた。そこでAmazon …