2015-03-03 4 views
-1

Моя задача - создать код, который является викториной для студентов. Это также позволяет учителям видеть, насколько хорошо студент сделал это по сравнению с остальной частью класса. После того, как студент завершит тест, его «имя пользователя» и «correct_answers» будут сохранены в текстовом файле (часть моего кода, который действительно работает). Мне удалось предотвратить мой код от создания нового имени пользователя каждый раз, когда тот же самый ученик повторяет тест. Все вышеизложенное происходит, когда пользователь выбирает «if status == 1:». (статус 1 для студентов, а статус 2 - для учителей).Python: правильная сортировка и печать данных из txt-файла

Когда выбран статус 2, учителю задают вопрос, какой класс они хотели бы просмотреть. После того, как один был выбран, 3 последние оценки и имя пользователя должно быть отсортирован:

  1. в алфавитном порядке с каждым студентов самый высокий балл за тест
  2. по наибольшему количеству баллов, от высшего к низшему
  3. в среднем оценка, высшего к низшему

Это то, что я придумал для статуса 2 до сих пор:

elif status == 2: 
while True: 
    try: 
     users_class2 = int(input("Which class would you like to view? (1,2 or 3)")) 
    except ValueError: 
     print("Please enter a number!") 
    else: 
     if users_class2 not in {1,2,3}: 
      print("Please enter a number in {1,2,3}!") 
     else: 
      break 

if users_class2 == 1: 
    val=[] 
    keys=[] 
    i=0 
    l=[] 
    lines=open('class1.txt','r').readlines() 
    for line in lines: 
     try: 
     val.append(int(line)) 
     except: 
     keys.append(line) 

    for i in range(0,len(val),3): 
    h=val[i:i+3] 
    h.sort() 
    l.append(h[::-1]) 
    print ("Sort the test results alphabetically and show the students highest score.\n") 
    for i,j in zip(keys,l): 
     print ("{},{}".format(i,j)) 

    print ("Sort by the average score, highest to lowest.") 
    avlist=[float(sum(i))/len(i) for i in l ] 
    print ("{}".format(avlist)) 
    while(len(avlist)): 
     for i,j in zip(keys,avlist): 
      if j==max(avlist): 
       print ("{},{}".format(i,j)) 
       avlist.remove(j) 

    print ("'\nSort by the highest score, highest to lowest.\n") 
    hlist=[max(i) for i in l ] 
    hlist.sort() 
    hlist=hlist[::-1] 
    for k in hlist: 
     for i,j in zip(keys,l): 
      if max(j)==k: 
       print ("{},{}".format(i,j)) 

В приведенном выше коде показан только оператор if, который предназначен для 'users_class2'. Это повторяется еще 2 раза для «class2.txt» и «class3.txt».

После того, как выбран класс, мой код должен вывести что-то вроде:

Сортировка результатов испытаний по алфавиту и показывает студентам highestscore.

Алан, 8,7,8

Боб, 9,9,8

Чарли, 3,4,5

Сортировать по среднему баллу, от высшего к низшему ,

Боб, 9,9,8

Алан, 8,7,8

Чарли, 3,4,5

Сортировать по наибольшему количеству баллов, от высшего к низшему ,

Боб, 9,9,8

Алан, 8,7,8

Чарли, 3,4,5

Но вместо этого я получаю:

Сортируйте результаты тестов в алфавитном порядке и покажите студентам самый высокий балл.

Сортировать по среднему баллу, наивысшему наименьшему.

[]

Сортировать по наибольшему количеству баллов, от высшего к низшему.

Я работаю над этим уже довольно давно, но не повезло. Я был бы очень признателен, если бы кто-то помог мне найти исправление для этого. Если вы видите какие-либо области, где я могу сделать свой код эффективным, скажите об этом. Благодарю.

+0

первой строке код здесь: 'elif status == 2:'? Кажется, что-то не хватает, поскольку он не может быть первой строкой вашего кода. – Marcin

+1

@ Marcin OP сказал, что это выдержка, очевидно, первая часть кода: 'if status == 1:' для ученика – Calum

+0

с использованием 'lines = open ('class1.txt', 'r'). Readlines() 'вы можете отбросить дескриптор файла, который должен закрыть файл в конце операции. Вы можете использовать оператор 'with', чтобы удалить необходимость закрыть файл или захватить возвращаемое значение из' open' и называть 'close' на нем. Подробнее см. В python [docs] (https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files). –

ответ

-1

если users_class2 не в {1,2,3}:

должно быть действительно

если users_class2 не в [1,2,3]:

Попробуйте распечатать, что такое val и ключи, они распечатывают данные, как вы ожидали?


Так из вашего кода кажется, что вы пытаетесь читать из текстового файла, а затем добавить их в keys и val, верно?

Вы можете попробовать добавить эти заявления для отладки цели, чтобы увидеть, если «Вэл» получал заселена, как и ожидалось:

print "val is" 
print val 
print "=====" 

Вы можете добавить, что право выше этого цикл возможно for i in range(0,len(val),3):

+0

Im sorry. Я совершенно новичок в кодировании. Что вы подразумеваете под «Попробуйте распечатать, что такое val и ключи»? – Sajid

+0

Я продолжаю получать неверную синтаксическую ошибку – Sajid

+0

, какая строка дает вам недопустимую синтаксическую ошибку? – Mariatta

Смежные вопросы