Python 滑冰运动员记分系统

Python 滑冰运动员记分系统,python,list,Python,List,这是我一直在做的一个项目,但我遇到了一些问题。当这个程序被执行时,它会打印两次滑冰者的名单和相关信息,但我不想这样,但我不知道如何修复它 # 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: #S

这是我一直在做的一个项目,但我遇到了一些问题。当这个程序被执行时,它会打印两次滑冰者的名单和相关信息,但我不想这样,但我不知道如何修复它

# 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
l\u list
都是空的:您获得姓名和分数,将它们附加到
list
并将其附加到
l\u list
。一切都很好

但是你要为你的下一个滑冰选手第二次完成这个循环。您可以将他们的姓名和分数附加到
列表
,该列表已包含前一名滑冰运动员的姓名和分数。然后,您将整个内容再次附加到
l\u列表中。现在,
l_list
有两份
list
的副本,
list
既有滑冰选手也有他们的分数


在调用
list.append()
之前添加
list=[]
可以解决问题。

您需要通过循环每次重新创建
list

第一次通过循环时,
list
l\u list
都是空的:您获得姓名和分数,将它们附加到
list
并将其附加到
l\u list
。一切都很好

但是你要为你的下一个滑冰选手第二次完成这个循环。您可以将他们的姓名和分数附加到
列表
,该列表已包含前一名滑冰运动员的姓名和分数。然后,您将整个内容再次附加到
l\u列表中。现在,
l_list
有两份
list
的副本,
list
既有滑冰选手也有他们的分数


在调用
list.append()
之前添加
list=[]
可以解决问题。

您有了一个良好的开端,但我想警告您不要使用变量名
list
。这是Python中一个类型的名称,因此可以使用
lst
list\uu
。在这种情况下,我称之为
skater\u 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

您有了一个良好的开端,但我想警告您不要使用变量名
列表
。这是Python中一个类型的名称,因此可以使用
lst
list\uu
。在这种情况下,我称之为
skater\u 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
。除了Python已经使用它之外,名称
list
并没有说明它是什么<代码>滑板者列表
,正如@Zev所建议的,是好的。或者,类似于
skater\u data
。同意不调用您的列表
list
。除了Python已经使用它之外,名称
list
并没有说明它是什么<代码>滑板者列表
,正如@Zev所建议的,是好的。或者,类似于
skater\u数据