使用in查找列表中的字符串

时间:2017-01-02 13:05:22

标签: python-3.x

我正在创建一个关于玩家和分数的程序,该程序基本上存储了玩家的名字和分数(由用户添加),其中一个要求是按名字查找玩家。名称和分数将添加到列表名称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()

当代码执行时,列表中的所有玩家都会被显示,而不仅仅是玩家和用户想要的分数。我的问题是如何让程序只显示我想要的玩家的名字和分数?

1 个答案:

答案 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!")