我正在创建一个关于玩家和分数的程序,该程序基本上存储了玩家的名字和分数(由用户添加),其中一个要求是按名字查找玩家。名称和分数将添加到列表名称playerList
中def findgolfer():
playerList.sort()
while True:
findd=input("Enter a golfer's name\n(m for main menu)\n")
for findd in playerList:
print (findd, "score =", playerList[playerList.index(findd)]
if findd == 'm':
print (findd, " does not exist")
main()
当代码执行时,列表中的所有玩家都会被显示,而不仅仅是玩家和用户想要的分数。我的问题是如何让程序只显示我想要的玩家的名字和分数?
答案 0 :(得分:1)
你应该写你的问题。具体来说,你在评论中写的内容应该在问题中清楚。你的问题是:
给出一对对象(球员,得分)和球员姓名(字符串)的列表,如何检查球员是否存在并检查得分?
如果你写了类似的东西,很明显你保持球员得分的方法并不是首选。我会在一秒钟之内回到这里。最简单的方法,只需要一点Python魔术就能做到你想做的事情:
#Assume inputPlayer was accepted as input
for player,score in playerList:
if player == inputPlayer:
print("Player",player,"has",score,"points.")
break
else: print("Player",inputPlayer,"does not exist!")
这将演示您应该阅读的Python中的for else
构造。还有其他方法可以做到这一点,但值得了解,因为这是一个特殊功能。
什么是“更好”的方式?如果您在dict中维护了自己的播放器和得分列表,则会有O(1)操作和更好的可读性(在我看来)。您可以使用以下命令轻松地将元组列表转移到dict
scores = dict(playerList)
但您可能希望在初始代码中构建dict
。可能你有playerList.append((user,score))
的地方,你会有一个scores[player] = score
。如果是这种情况,则上述内容变为:
try: print("Player",inputPlayer,"has",scores[inputPlayer],"points.")
except KeyError: print("Player",inputPlayer,"does not exist!")