忍者ブログ

PPM - Python Program Magazine

Pythonのプログラムを公開するだけのブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

フラッシュ暗算

計算能力を鍛えましょう

足し算なんて簡単さ

 1秒に1個ずつ表示される1桁の数字10個を足し算します。
 これ、毎日やると計算能力鍛えられそうですね。
 もう少し凝って、桁数や時間、出題数を変えられるよう改造する余地があります。


プログラムの説明

 このプログラムはGUIをつかっています。GUIは標準ライブラリのtkinterです。
 ウィジェットの配置にはgridを使用しています。
 after()メソッドでfunc_clear()とfunc_interval()を交互に呼び出しています。そうしないと同じ数字が続いたときにわからなくなるためです。

プログラム

ダウンロード

import tkinter as tk
import random

# 問題
mondai = []
# 出題番号
number = 0
# 状態
state = 0

# ガイド文字列
guide_message = '開始ボタンを押すとスタートします'

def func_clear():
    '''
    消去処理
    '''
    # 表示消去
    global lbl
    lbl['text'] = ''
    # 次の出題の表示設定
    global number
    number += 1
    root.after(500, func_interval)
    return

def show_addend():
    '''
    問題の表示
    '''
    global lbl
    global mondai
    global number
    lbl['text'] = str(mondai[number])
    global root
    root.after(500, func_clear)
    return

def func_interval():
    '''
    定期処理
    '''
    global number
    global mondai
    if number < len(mondai):
        # 出題番号の値表示
        show_addend()
        return

    # 定期処理開始
    global root
    global btnStart
    btnStart['state'] = tk.NORMAL
    btnStart['text'] = '答え'
    lblStart.config(state=tk.NORMAL)
    return

def satrt_anzan():
    '''
    ハンドラ関数
    '''
    global btnStart
    global mondai
    global number
    global state
    if state == 0:
        state = 1
        # 押されたボタンの無効化
        btnStart.config(state=tk.DISABLED)
        lblStart.config(state=tk.DISABLED)
        # 変数初期化
        number = 0
        # 問題作成
        mondai = []
        for no in range(10):
            mondai.append(random.randint(1, 9))
        # 最初の値表示
        show_addend()
        return

    state = 0
    # 最後まで表示した
    lbl['text'] = f'答え={sum(mondai)}'
    btnStart['text'] = '開始'
    number = 0
    return

'''
メイン処理
'''
# トップレベルウインドウの生成
root = tk.Tk()
root.title('Flash Anzan')
root.geometry('320x240')

#Labelウィジェットの生成
lbl = tk.Label(root, text='', font=('System', 40))
lblStart = tk.Label(root, text=guide_message, font=('System', 20))

# Buttonウィジェットの生成と配置
btnStart = tk.Button(root, text='開始', font=('System', 20), command=satrt_anzan)
# 各列の割合を指定
root.columnconfigure(0, weight=1)
# 各行の割合を指定
root.rowconfigure(0, weight=3)
root.rowconfigure(1, weight=1)
root.rowconfigure(2, weight=1)

# grid関数で配置
lbl.grid(column=0, row=0, columnspan=1)
btnStart.grid(column=0, row=1, columnspan=1)
lblStart.grid(column=0, row=2, columnspan=1)

# トップレベルウインドウの表示
root.mainloop()

拍手[0回]

PR