Python 3 переставляет кортежи с приоритетом - PullRequest
0 голосов
/ 12 сентября 2018

Эта программа написана с целью сбора имени, возраста и оценки с использованием запятых в качестве разделителей. После того, как значения были введены, программа упорядочит список, отдавая приоритет именам, возрастам и оценкам соответственно. Однако результат оказался не таким, как ожидалось.

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 не работает.

1 Ответ

0 голосов
/ 12 сентября 2018

Вы берете ввод 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)))
...