タイマーを使ったリアルタイムでの変数値切り替え

に公開

今回はライブラリtriggonに新しく追加予定のタイマー機能を使って、変数の値を切り替えてみました。
シンプルな計算クイズのコード例で紹介します。

サンプルコード

import random

from triggon import Triggon

# ラベルと新しい値を設定
tg = Triggon({
    "time_up": True, 
    "result": "〇",
    "add": 1,
})

time_up = False
result = "✕"
add = 0

# 変数登録
tg.switch_var({
    "time_up": time_up, 
    "result": result,
    "add": add,
})

tg.set_trigger("time_up", after=10) # 10秒後にtime_up変数の値をTrueに切り替える
correct = 0

for _ in range(20):
    x = random.randint(1, 10)
    y = random.randint(1, 10)

    answer = int(input(f"{x} × {y} = ") or 0)

    # 正解なら変数を設定した新しい値に切り替える
    # "result": "✕" → "〇", "add": 0 → 1
    tg.set_trigger(["result", "add"], cond="answer == x*y")
    print(result)
    correct += add

    tg.revert(["result", "add"]) # それぞれ元の値に切り替える

    if time_up:
        print("\nTime's up!")
        break

print(f"スコア: {correct}問正解!")

画像になりますが出力はこんな感じになります

このように正解だった場合、変数の元の値を新しい値に切り替えています。
値が切り替わった場合、revert()によって元の値に再度戻しています。
今まではset_trigger()で即時値が切り替わっていましたが、after引数を使うことで遅延させて値を切り替えられるようになりました!

内部ではthreadingTimerを使用し、トリガーを設定した秒数の後に有効にしています。
厳密には設定した秒数より約0.01秒遅れて切り替わります。
revert()関数にも、このafter引数で任意の秒数後に元の値に切り替えることも可能です。

この機能は現在のバージョン(0.1.0b4)ではまだ使用できませんが、近々アップデートする予定です!
ソースコードはすでにGitHubにて公開していますので気になる方は見てみてください~

🔗 PyPI → https://pypi.org/project/triggon/
🔗 GitHub → https://github.com/tsuruko12/triggon
🔗 X → https://x.com/12tsuruko

Discussion