grader/main.py

94 lines
2.8 KiB
Python
Raw Permalink Normal View History

2024-08-21 14:25:40 +00:00
import firepup650 as fp
2024-08-27 14:32:54 +00:00
keys = {"Create new assignment": False}
try:
from assignments import keys
except:
with open("assignments.py", "w") as file:
file.write(f"keys = {keys}")
2024-08-21 14:25:40 +00:00
fp.replitCursor = fp.bcolors.REPLIT + "> " + fp.bcolors.RESET
answerKey = []
answer = "0"
answerCount = 0
2024-08-27 14:32:54 +00:00
key = False
2024-08-30 14:40:22 +00:00
validAnswers = []
2024-08-21 14:25:40 +00:00
2024-08-27 14:32:54 +00:00
if len(keys) > 1:
key = fp.menu(keys, "Please select an assignment to grade")
2024-08-21 14:25:40 +00:00
fp.clear()
2024-08-27 14:32:54 +00:00
if key:
2024-08-30 14:40:22 +00:00
answerKey = key["key"]
answerCount = len(key["key"])
validAnswers = key["valid"]
2024-08-27 14:32:54 +00:00
else:
while not False:
answer = fp.replitInput(
f"Please input the answer to question #{answerCount + 1}, empty answer to submit answer key"
).upper()
if not answer:
break
if len(answer) > 1:
multi = fp.replitInput("Is this multiple answers? (Y|n)")
if multi.upper() != "N":
for i in range(len(answer)):
answerCount += 1
answerKey.append(answer[i])
continue
answerCount += 1
answerKey.append(answer)
name = fp.replitInput("Please enter the name of this assignment")
2024-08-30 14:40:22 +00:00
validAnswers = list(
fp.replitInput("Please enter the valid answers to this assignment").upper()
)
keys[name] = {"key": answerKey, "valid": validAnswers}
2024-08-27 14:32:54 +00:00
with open("assignments.py", "w") as file:
file.write(f"keys = {keys}")
2024-08-21 14:25:40 +00:00
fp.clear()
2024-08-30 14:40:22 +00:00
tDigits = 1
tmp = answerCount
2024-08-30 14:46:48 +00:00
while tmp > 9:
2024-08-30 14:40:22 +00:00
tmp = tmp / 10
tDigits += 1
2024-08-21 14:25:40 +00:00
while 1:
right = 0
2024-08-21 14:37:36 +00:00
try:
2024-08-27 14:13:54 +00:00
queue = []
2024-08-21 14:37:36 +00:00
for i in range(answerCount):
2024-08-27 14:13:54 +00:00
answer = ""
if not queue:
answer = fp.replitInput(
f"Please input the student's answer to question {i + 1}. ^C at any time to show results immediately."
).upper()
else:
answer = queue.pop(0)
if len(answer) > 1:
multi = fp.replitInput("Is this multiple answers? (Y|n)")
if multi.upper() != "N":
queue = list(answer)
answer = queue.pop(0)
2024-08-30 14:40:22 +00:00
aDigits = 0
tmp = i + 1
2024-08-30 14:46:48 +00:00
while tmp > 9:
2024-08-30 14:40:22 +00:00
aDigits += 1
tmp = tmp / 10
digits = tDigits - aDigits
space = " " * digits
2024-08-21 14:37:36 +00:00
if answer == answerKey[i]:
right += 1
2024-08-30 14:40:22 +00:00
print(f"++ Answer {space}{i + 1} is correct")
elif answer in validAnswers:
print(f"-- Answer {space}{i + 1} is incorrect")
2024-08-21 14:37:36 +00:00
else:
2024-08-30 14:40:22 +00:00
print(f"?? Answer {space}{i + 1} is N/A")
2024-08-21 14:37:36 +00:00
except KeyboardInterrupt:
pass
2024-08-21 14:25:40 +00:00
print(
2024-08-21 14:45:54 +00:00
f"\nThe student got {right}/{answerCount} correct, which is approximately {round((right/answerCount) * 100, 2)}%.\n"
2024-08-21 14:25:40 +00:00
)