Это программа, над которой я работал, но у меня были проблемы. Когда эта программа выполняется, она печатает список фигуристов и там информация дважды, но я этого не хочу, но я не знаю, как ее исправить
# 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
имен переменных. Это имя типа в 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
Вы должны каждый раз воссоздавать list
через цикл.
В первый раз через цикл list
и l_list
являются пустыми: вы получаете имя и баллы, добавляете их в list
и добавляете в l_list
. Все хорошо.
Но затем вы пройдете через петлю второй раз для своего следующего фигуриста. Вы добавляете их имя и партитуры в list
который уже имеет предыдущее имя фигуриста и забил. Затем вы снова добавляете эту вещь в l_list
. Теперь у l_list
есть две копии list
, а в list
есть как фигуристы, так и их баллы.
Добавление list = []
перед вызовом list.append()
должно решить проблему.
list
. В дополнение к тому, что он уже используется Python,list
имен ничего не говорит о том, что это такое.skater_list
, как предполагает @Zev, это хорошо. Или что-то вродеskater_data
.