import os
def grade(user_globals):
notebook_dir = os.getcwd()
answer_file = os.path.join(notebook_dir, 'answer', '03_answer.txt')
if not os.path.exists(answer_file):
answer_file = './answer/03_answer.txt'
if not os.path.exists(answer_file):
answer_file = os.path.join(notebook_dir, 'quick_start', 'cann_basics', 'answer', '03_answer.txt')
correct = {}
with open(answer_file) as f:
for line in f:
line = line.strip()
if line:
n, ans = line.split('.', 1)
correct[int(n.strip())] = ans.strip().upper()
my_answers = {}
unanswered = []
for q in sorted(correct.keys()):
var = f'q{q}'
if var in user_globals:
val = user_globals[var]
ans = val.strip().upper() if isinstance(val, str) else str(val).strip().upper()
if not ans:
unanswered.append(q)
my_answers[q] = ans
else:
unanswered.append(q)
my_answers[q] = ''
if unanswered:
print(f'⚠️ 以下题目尚未作答:{unanswered}')
print('请填入答案并运行对应单元格后,再运行批改。')
return
wrong = []
for q in sorted(correct.keys()):
if my_answers.get(q, '') != correct[q]:
wrong.append(q)
if not wrong:
print('🎉 全部正确!')
else:
print(f'以下题目答错:{wrong}')
print(f'得分:{len(correct) - len(wrong)}/{len(correct)}')