2016-04-02 3 views
0

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

if classChoice ==1: 
     File=open("A.txt","a+") 
     File.write(names+","+str(score)+"\n") 
     File.close() 

if classChoice ==2: 
     File=open("B.txt","a+") 
     File.write(names+","+str(score)+"\n") 
     File.close() 
if classChoice ==3: 
     File=open("C.txt","a+") 
     File.write(names+","+str(score)+"\n") 
     File.close() 
+0

Итак, вы не хотите, чтобы _append_ ваш результат, но вы хотите _overwrite_ их? – MrP01

+0

@ MrP01 um я не хочу, чтобы предыдущие оценки другого пользователя были удалены, но если пользователь уже выполнил викторину более чем в 2 раза, то более скромный результат - это удаление –

ответ

0

Очевидно, что вы хотите сохранить свои данные в определенной структуре данных, определенной вашими. В вашем случае вы заинтересованы в сохранении только двух последних баллов конкретного ученика.

Давайте наблюдать, как делает ваш файл "a.txt" вид:

Джон, 90

Sam, 80

Алиса, 100

Sam, 90

Джон , 100

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

def convert_file_to_dict(path): 
    d = {} 
    lines = open(path).splitlines() 
    for line in lines: 
    name, grade = line.split(',') 
    if name in d: 
     d[name].append(grade) 
    else: 
     d[name] = [grade] 
    return grade 

В нашем случае, если я буду называть convert_file_to_dict('A.txt'), я буду получать словарь, который состоит из { 'John':['90','100'], 'Sam':['80','90'], 'Alice':['100'] }. Обратите внимание, что порядок в списке оценок сохраняется по порядку строк в «A.txt».

Теперь с этим словарем вы можете контролировать, что только последние 2 сорта хранятся:

def insert_new_grade(grades_dict, name, grade): 
    if name in grades_dict: 
    if len(grades_dict[name]) == 1: 
     grades_dict[name].append(str(grade)) 
    else: 
     grades_dict[name] = grades_dict[name][1:] + [str(grade)] 
    else: 
    grades_dict[name] = [str(grade)] 

Теперь все, что вам нужно, это написать функцию, которая преобразует этот Dict в файл ... * Вы можете использовать полезные объекты, такие как collections.defaultdict, но я не хотел переполнять здесь ...

+0

справа. я попытаюсь воплотить это в mybut, не думаю, что это будет ork, потому что я не знаю, как быть честным. например, я помещаю это в каждый оператор класса –

+0

, какой части кода мне действительно нужно добавить в мой код для сохранения баллов в eb. так как после того, как у меня будет функция для учителя(), кто может выбрать класс для просмотра, и результаты будут напечатаны, поэтому я не хочу, чтобы язвы были напечатаны сразу после записи в файлы –

+0

????????? пожалуйста, помогите –

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