#python #pandas #canvas-lms
Вопрос:
Обязательное предупреждение — новичок в Python и Пандах.
У меня возникли некоторые трудности с выполнением цикла for, который возвращает только последнее значение в списке.
У меня есть файл .csv, содержащий информацию, которую я хотел бы запустить через CanvasAPI для публикации результатов пользователей. Макет .csv является:
Name user_id Score
0 Name_0 7454 90.0
1 Name_1 7075 96.0
2 Name_2 7377 76.0
3 Name_3 7259 49.0
4 Name_4 7294 48.0
5 Name_5 7491 76.5
Мой код для выполнения цикла таков:
canvas = Canvas(API_URL, API_KEY)
course = canvas.get_course(9997)
assignment = course.get_assignment(78290)
userlist = [canvas.get_user(user) for user in df['user_id']]
length1 = len(userlist)
for i in range(length1):
(userlist[i])
scorelist = df['Score']
length2 = len(scorelist)
for x in range(length2):
(scorelist[x])
submission = assignment.get_submission(userlist[i])
submission.edit(submission={'posted_grade': scorelist[x]})
Циклы успешно выполняются, но фактически забивается только последняя строка файла .csv (для Name_5). Чего мне не хватает? Любая помощь будет очень признательна.
Комментарии:
1. это потому, что в
submission = assignment.get_submission(userlist[i])
вы используете i, который в последний раз обновлялся в предыдущем цикле и, как вы догадались, соответствует последнему индексу вашего списка2. Большое спасибо — какое значение я должен заменить для обработки остальной части списка?
Ответ №1:
Проблема в последнем цикле for.
for x in range(length2):
(scorelist[x])
Каждый раз, когда цикл повторяется, scorelist[x] будет последним значением x. Таким образом, в конце выполнения scorelist[x] будет последним значением x.
Вам нужно будет сохранять значение scorelist[x] при каждом повторении цикла. Один из способов сделать это-добавить значения в список:
scores = []
for x in range(length2):
scores.append(scorelist[x])
Затем вам нужно будет изменить отправку в конце, чтобы отправить все результаты, а не только последний результат.
for i in range(len(userlist)):
submission = assignment.get_submission(userlist[i])
submission.edit(submission={'posted_grade': scores[i]})
Есть более чистые способы сделать это, но я постарался изменить ваш код как можно меньше.
Комментарии:
1. Большое спасибо за помощь. К сожалению, проблема сохраняется — записывается только конечное значение.
2. Я обновил его, чтобы включить 2-е изменение, которое вам нужно внести, чтобы отправить каждую из этих оценок.