需要Python关于列表和提取数字的帮助。

需要Python关于列表和提取数字的帮助。,python,Python,我又被一个密码卡住了。 我有一个名为players.txt的文件,如下所示: Brad Ebert,471 Michael Johnson,459 Brodie Smith,466 Kade Simpson,466 Luke Shuey,465 Justin Westhoff,464 items = open('players.txt') items = [i.split(',', 1)[1] for i in items] player = input('Player: ') while p

我又被一个密码卡住了。 我有一个名为players.txt的文件,如下所示:

Brad Ebert,471
Michael Johnson,459
Brodie Smith,466
Kade Simpson,466
Luke Shuey,465
Justin Westhoff,464
items = open('players.txt')
items = [i.split(',', 1)[1] for i in items]
player = input('Player: ')
while player != ' ':
  player = input('Player: ')
  for person in player:
    result = sum(items[person]) for person in player) 
    print (result)
我的代码如下所示:

Brad Ebert,471
Michael Johnson,459
Brodie Smith,466
Kade Simpson,466
Luke Shuey,465
Justin Westhoff,464
items = open('players.txt')
items = [i.split(',', 1)[1] for i in items]
player = input('Player: ')
while player != ' ':
  player = input('Player: ')
  for person in player:
    result = sum(items[person]) for person in player) 
    print (result)
我怎样才能在输入球员姓名时得到以下结果?代码应在空白输入时停止:

Player: Justin Westhoff
Player: Brodie Smith
Player: Brad Ebert
Player: 
Total score for team: 1401

您正在尝试对文件对象进行列表理解

试着把你的第一行放在

items = open('players.txt').read().split('\n')

因此,条目应该是列表中的每一行的列表,正如您的列表理解所期望的那样

首先尝试设置如下词典:

Brad Ebert,471
Michael Johnson,459
Brodie Smith,466
Kade Simpson,466
Luke Shuey,465
Justin Westhoff,464
items = open('players.txt')
items = [i.split(',', 1)[1] for i in items]
player = input('Player: ')
while player != ' ':
  player = input('Player: ')
  for person in player:
    result = sum(items[person]) for person in player) 
    print (result)
这是交互式python的输出

>>> f = open('players.txt')
>>> playerMap = {}
>>> for line in f:
...   line = line.strip()
...   parts = line.split(",")
...   playerMap[parts[0]] = int(parts[1])
... 
>>> playerMap
{'Michael Johnson': 459, 'Justin Westhoff': 464, 'Luke Shuey': 465, 'Kade Simpson': 466, 'Brad Ebert': 471, 'Brodie Smith': 466}
>>> 
然后检查播放器字符串是否是playerMap中的键

result = 0
while player != '':
  if player in playerMap:
    result += playerMap[player]
  #If player is empty now no work will be done
  player = input('Player: ')
#print result when you are done
print(result)

正如@pbible所说,使用dict是最好的方法。以下是我的解决方案:

items = open('players.txt')
myDict = dict()
for i in items:
    myKey, myVal = i.split(',')
    myDict[myKey.lower()] = int(myVal)

result = 0
while True:
    player = input('Player: ')
    if player = '':
        break
    elif myDict.get(player.lower()):
        result += myDict[player]
    else:
        print('Player not found')

print('Total score for team: ' + str(result))

你有什么问题?有一件事可能是,也许你是说!=空字符串?列表理解项=[i.split',',1[1]对于i in items]工作正常,但它包含换行符。您可以用这种方式迭代文件。还有,.read。应该是.read..你从我身上学到了一些东西,不知道你可以用这种方式迭代文件对象。你的似乎是目前为止最好的一个,但我如何转换为int以使其生效:回溯最近的调用last:file program.py,第6行,in result=sumtimes[person]for person in player file program.py,第6行,InResult=sumitems[person]for person in player TypeError:列表索引必须是整数,而不是stry您应该制作一个将名称映射到int的字典。然后检查输入是否在字典中。+1我喜欢这个答案。唯一的建议是只有输入为空时才中断。要求用户输入一个匹配的名字可能是对用户太过信任,以至于每次都无法正确使用。我尝试了你的代码,它似乎工作得很好,但当我打印结果时,它只打印最后输入的玩家的值?这是我的错误吗?很好,我喜欢这些变化。这无疑会让用户更轻松。