Система оценки фигуристов

1

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

# THESE ARE LISTS TO STORE INDIVIDUAL SKATERS AND THERE SCORES AND MEDIUM 

l_list = []
list = []

#STATMENT TO START WHILE LOOP AND TO END IT 

re = True 
while re == True:

    #STORING THE SKATERS NAME AND ADDING OPTION TO STOP ADDING SKATERS IN TO PROGRAM

    a_name = input("Please store the skaters name, if there are no more skaters enter 'stop'")

    #PRINTING ALL SKATERS AND THERE SCORES AND MEDIUM AND ADDING OPTION TO ADD MORE OR END PROGRAM

    if a_name == 'stop':
       #were pritn(l_list was)---------------------------------------------------------------------------------------
        for s in l_list:
            print(*s)
        exit = input("Would you like to exit? 'y/n'. ")
        if exit == 'y':
            break

    #WHILE LOOP TO GET SCORES AND STORE THEM IN A LIST

    scores = []
    repeat = True
    while repeat == True:

        #ASKING FOR THE SCORES AND A INPUT TO END THIS PROGRAMS FUNCTION WHICH WILL STORE THE SCORES TO THE LIST(scores)

        score = input("please type in your scores one at a time, and 'done' when finished.")
        if score == "done":

            repeat = False
        else:
            scores.append(score)


    #SORTING SCORES, REMOVING HIGHEST AND LOWEST SCORES 

    scores.sort()
    scores.remove(max(scores))
    scores.remove(min(scores))

    #STORING THE VARIABLE(a_name) AND THE LIST(scores) IN THE LIST(list)
    #THEN STORING THE LIST(list) INTO THE LIST(l_list)
    list.append(a_name)
    list.append(scores)
    l_list.append(list)

    #CONVERTING THE CONTENTS OF THE LIST(scores) IN TO FLOATS SO THAT IT CAN FIND TEH MEDIUM/AVERAGE SCORE USING LEN AND SUM
    #THEN STORING THE VARIABLE(med) INTO THE LIST(list)

    scores = [float(i) for i in scores]
    med = (sum(scores) / float(len(scores)))
    list.append(med)


#RUN FUNCTION  
start()

когда я запускаю программу с некоторыми результатами тестирования, это то, что она печатает:

[['thomas', ['2', '3', '4', '58'], 16.75, 'renee', ['2', '3', '4', '5', '6'], 4.0], ['thomas', ['2', '3', '4', '58'], 16.75, 'renee', ['2', '3', '4', '5', '6'], 4.0]]
Would you like to exit? 'y/n'.

как вы можете видеть, он печатает его дважды, чего я не хочу.

Теги:
list

2 ответа

2

Вы отправились на хороший старт, но я хотел бы предупредить вас об использовании list имен переменных. Это имя типа в Python, поэтому вместо этого вы можете использовать lst или list_. В этом случае я бы назвал его skater_list. Этот вопрос охватывает все имена, которые нельзя использовать для переменных.

Когда вы добавляете имена и оценки в свои списки, вы никогда не очищаете их, поэтому вы добавляете их несколько раз.

Однако, я не думаю, что списки на самом деле были бы вашей наиболее полезной структурой данных здесь. Я думаю, что dict где ключ - это имя, а значения - это результаты, которые будут работать лучше всего.

Вначале создайте dict а не ваши списки:

final_dict = {}

При распечатке списка распечатайте вместо этого dict:

    if a_name == 'stop':
       #were pritn(l_list was)---------------------------------------------------------------------------------------
        for name, scores in final_dict.items():
            score, med = scores
            print(name, score, med)

Удалите свой код, чтобы добавить элементы в списки

    scores.sort()
    scores.remove(max(scores))
    scores.remove(min(scores))

    scores = [float(i) for i in scores]
    med = (sum(scores) / float(len(scores)))

Вместо этого добавьте их в словарь. Здесь я сделал ключ именем фигуриста и сохранил как все остальные баллы, так и средний балл.

    final_dict[a_name] = (scores, med)

Обратите внимание: вам все равно нужно очистить список баллов:

    scores = []

Результат здесь будет примерно таким:

Adam [7.0, 8.0] 7.5
Joe [6.0, 7.0] 6.5
  • 1
    Договорились о том, чтобы не называть ваш list . В дополнение к тому, что он уже используется Python, list имен ничего не говорит о том, что это такое. skater_list , как предполагает @Zev, это хорошо. Или что-то вроде skater_data .
2

Вы должны каждый раз воссоздавать list через цикл.

В первый раз через цикл list и l_list являются пустыми: вы получаете имя и баллы, добавляете их в list и добавляете в l_list. Все хорошо.

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

Добавление list = [] перед вызовом list.append() должно решить проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню