method化したtkinter
import tkinter as tk
import tkinter.messagebox as tmsg
import random
def main():
global a
a = mk_a()
mk_window()
root.mainloop()
def mk_a():
# global a
# random.seed(0)
a = [
random.randint(0, 9),
random.randint(0, 9),
random.randint(0, 9),
random.randint(0, 9),
]
print(a)
return a
# print(str(a[0])+str(a[1])+str(a[2])+str(a[3]))
def mk_window():
global root, rirekibox, label1, editbox1, button1
root = tk.Tk()
root.geometry("600x800")
root.title("数あてゲーム")
root.bind("<Return>", ButtonClick)
rirekibox = tk.Text(root, font=(("Helvetica", 14)))
rirekibox.place(x=400, y=0, width=200, height=800)
label1 = tk.Label(root, text="数を入力してね", font=("Helvetica", 14))
label1.place(x=20, y=20)
editbox1 = tk.Entry(width=4, font=("Helvetica", 28))
editbox1.place(x=120, y=60)
editbox1.focus_set()
button1 = tk.Button(
root, text="チェック", font=("Helvetica", 14), command=ButtonClick
)
button1.place(x=220, y=60)
def get_number():
b = editbox1.get()
isok = False
while isok == False:
# b = input("数を入れてね>")
if len(b) != 4:
tmsg.showerror("エラー", "4桁の数字をいれてね")
return
else:
kazuok = True
for i in range(4):
if (b[i] < "0") or (b[i] > "9"):
tmsg.showerror("b[" + str(i) + "]は数字ではありません.")
kazuok = False
return
else:
isok = True
return b
def check_hit_and_blow(a, b):
hit = 0
for i in range(4):
if a[i] == int(b[i]):
hit = hit + 1
blow = 0
for j in range(4):
for i in range(4):
if (int(b[j]) == a[i]) and (int(b[i]) != a[i]) and (int(b[j]) != a[j]):
blow = blow + 1
break
rirekibox.insert(tk.END, b + " h:" + str(hit) + "b:" + str(blow) + "\n")
return hit
def ButtonClick(event=None):
global hit, blow, isok
b = get_number()
hit = check_hit_and_blow(a, b)
if hit == 4:
tmsg.showinfo("あたり", "おめでとうさん.あたりでっせ.")
# print("当たり")
root.destroy()
main()
Author: Shigeto R. Nishitani
Created: 2026-06-08 Mon 12:32
Validate