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を使って、あまりのある割り算アプリを作ってみた」 […]

comment

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

関連記事

カワサキ ZX10R D型(06) プラグ交換

 インターネット上で、D型10Rの情報が少ないように感じるので、アップ出来るものはアップしていこうと思います。  新車で納車されたのは、既に14年も前の事なんですね。  細かなメンテナンスはやりながら …

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

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

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

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

Tkinterのメッセージボックス、謎ウインドウが消えない

pythonでTkinterを使用し、メッセージボックスを使おうと思ったが、謎ウインドウが出てきて処理が止まってしまう。    ↓のやつですね   調べてみると、「ルートウィンドウが無いと勝手に生成さ …

no image

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

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