# CodeSkulptor runs Python programs in your browser.
# Click the upper left button to run this simple demo.
# CodeSkulptor is tested to run in recent versions of
# Chrome, Firefox, and Safari.
#https://py3.codeskulptor.org/#user302_u8p2IrZei3OtDaK.py
import simplegui
import random
import time
started = False
message = "Good Luck!"
x = 0
y = 0
ans = 0
user_ans = -1
attempts = 0
max_attempts = 20
correct = 0
times = []
ans_time = -float('inf')
ans_color = 'Green'
ans_message = ''
font_size = 48
color = 'Red'
start_point_1 = (120, 20)
end_point_1 = (120,20)
end_point_2 = (480, 20)
nums = [3,4,6,7,8,9,12]
xnums = list(range(13))
xnums.extend(nums)
random.shuffle(xnums)
xnums_gen = (x_num for x_num in xnums)
miss_list = []
def gen_prob():
global x,y,ans
x = next(xnums_gen)
y = random.choice(nums)
ans = x*y
display_problem(x,y)
def display_problem(x,y):
global message
#inp.set_text("")
message = "{} x {} = ?".format(str(x), str(y))
def display_ans():
global color, message
color = temp_color
def miss():
global miss_list, ans_time, ans_color, ans_message
miss_list.append((x,y,x*y))
ans_time = time.time()
ans_color = 'Red'
ans_message = "{} x {} = {}".format(x,y,ans)
def print_misses(miss_list):
print("Study These:")
for miss in miss_list:
x = str(miss[0])
y = str(miss[1])
ans = str(miss[2])
print("{} x {} = {}".format(x,y,ans))
def hit():
global ans_time, ans_message, ans_color
ans_time = time.time()
ans_color = 'Green'
ans_message = "{} x {} = {}".format(x,y,ans)
def grade():
global message, started, times, font_size
#inp.set_text("")
started = False
runtime = int(time.time() - t1)
grade = 100*float(correct)/float(attempts)
message = "Grade: {} Time: {} ".format(grade, runtime)
if miss_list:
print_misses(miss_list)
if grade > 90:
times.append(runtime)
if len(times) ==3:
font_size = 30
message = "Your three times were: {}, {}, {}".format(*times)
print(message)
def check_answer():
if not started:
return
global ans, user_ans, attempts, correct, end_point_1, color, ans_message, ans_color, ans_time
attempts += 1
end_point_1 = (start_point_1[0] + (end_point_2[0]-start_point_1[0]) * attempts/max_attempts, end_point_1[1])
if user_ans == ans:
correct += 1
hit()
else:
miss()
user_ans = None
if attempts < max_attempts:
gen_prob()
else:
grade()
return
# Handler for mouse click
def click():
global t1, attempts, correct, started
started = True
attempts = 0
correct = 0
t1 = time.time()
gen_prob()
def key_handler(key):
global user_ans
if key == 13:
check_answer()
elif key < 58 and key > 47:
char = chr(key)
if user_ans <0:
user_ans = int(char)
else:
user_ans = int(str(user_ans) + char)
elif key == 8:
user_ans = -1
else:
pass
# Handler to draw on canvas
def draw(canvas):
check_time = ans_time + 1
if ans_color == 'Red':
check_time += 2
if time.time() > check_time:
canvas.draw_text(message, [112,112], font_size, color)
else:
canvas.draw_text(ans_message, [112,112], font_size, ans_color)
if ans_color == 'Red':
canvas.draw_text('INCORRECT :(', [112,212], font_size-5, ans_color)
else:
canvas.draw_text('CORRECT :)', [112,212], font_size-5, ans_color)
if started:
if user_ans >= 0:
canvas.draw_text(str(user_ans), [112,212], 48, "Red")
canvas.draw_line(start_point_1, end_point_1, 10, "Grey")
canvas.draw_line(end_point_1, end_point_2, 10, "White")
# Create a frame and assign callbacks to event handlers
frame = simplegui.create_frame("Home", 600, 300)
frame.add_button("Start", click)
frame.set_draw_handler(draw)
#inp = frame.add_input("Answer", answer_box, 50)
#inp.set_text("")
frame.set_keyup_handler(key_handler)
# Start the frame animation
frame.start()
Comments