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

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

関連記事

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

うちの小学1年生の子の宿題に「計算カード」があります。 学校からは、「時間を計ってやりなさい」と言われているようです。 もちろん計算なんかせず、めくる事が目的になって、 どれだけ早くめくれるか。みたい …

3Dプリンター用のデータの作り方(初心者向けFusion 360の使い方)

   3Dプリンターを購入し、作りたい物が作れるようになったので、3Dプリンターで使える3Dデータ(STLデータ)の作り方を解説します。ソフトは無料の物を使用します。   簡単!きれいな造形です!とう …

バイク用バッテリーレスキットを自作する

 早速ですが、KSR80のエアクリーナーボックスを撤去したら、バッテリーの置き場にこまったので、バッテリーレス化します。  バッテリーレスキットの自作は、前から気になって調べていたので、コンデンサつな …

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

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

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

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