0

编写此程序的目的是使用逗号作为分隔符来收集姓名、年龄和分数。键入值后,程序将重新排列列表,分别优先考虑姓名、年龄和分数。然而,结果并不像预期的那样。

from operator import itemgetter, attrgetter
store=[] 
store1=[]
while True: 
    block = input("Enter Name, Age, Score: ") 
    if block: 
       store.append(block) 
    else: 
       break
store1=tuple(store)
print(sorted(store1, key=itemgetter(0,1,2)))

结果:

Enter Name, Age, Score: John,50,100
Enter Name, Age, Score: Jan,40,50
Enter Name, Age, Score: John,38,10
Enter Name, Age, Score: 
['Jan,40,50', 'John,50,100', 'John,38,10']

如上所示,重新排列名称没有问题。实际上,问题在于排序时的第2个和第3个变量。功能 itemgetter 似乎不起作用。

4

1 回答 1

0

您将输入name, age, score作为变量block

block = input("Enter Name, Age, Score: ")

然后将整个块附加到列表中。

store.append(block)

这样,包含姓名、年龄和分数的整个字符串被认为是一个条目。由于名称首先出现在字符串中,因此看起来好像仅对名称进行了排序。

store1=tuple(store)看起来也没有必要。这是我如何使用元组列表而不是字符串元组来实现您想要的:

from operator import itemgetter, attrgetter
store=[]

while True:
  block = input("Enter Name, Age, Score: ")
  if block:
    entry = tuple(block.split(',')[:3])
    store.append(entry)
  else:
    break
print(sorted(store, key=itemgetter(0,1,2)))
于 2018-09-12T01:52:06.473 回答