обновить вложенный список с помощью пользовательского ввода - PullRequest
0 голосов
/ 26 июня 2018

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

lines = [['geography', '8', '4', '7'],
         ['tv and cinema', '4', '4', '8', '7', '7'],
         ['all creatures great and small', '7', '8'],
         ['odd one out', '4', '7'],
         ['music', '3', '5', '8', '8', '7'],
         ['how many', '4']]



roundName = input("Enter the name of the round to add: ")
score = input("Enter the score for that round: ")

for line in lines:
    if roundName in line:
        line.append(score)
lines.append([roundName, score])


#for line in lines:
#    if line[0] == roundName.lower().strip():
#        existingRound = lines.index(line)
#        lines[existingRound].append(score)
#    else:
#        newRound = [roundName, score]
#        lines.append(newRound)

Закомментированная часть представляет мои первые несколько попыток,Ввод how many, 3 должен привести к

lines = [['geography', '8', '4', '7'],
             ['tv and cinema', '4', '4', '8', '7', '7'],
             ['all creatures great and small', '7', '8'],
             ['odd one out', '4', '7'],
             ['music', '3', '5', '8', '8', '7'],
             ['how many', '4', '3']]
#actually results, in 
[['geography', '8', '4', '7'],
             ['tv and cinema', '4', '4', '8', '7', '7'],
             ['all creatures great and small', '7', '8'],
             ['odd one out', '4', '7'],
             ['music', '3', '5', '8', '8', '7'],
             ['how many', '4', '3'],
             ['how many', '3']]

Я не могу правильно понять логику в цикле.Куда я иду не так?

1 Ответ

0 голосов
/ 26 июня 2018
for line in lines:
    if roundName in line:
        line.append(score)
lines.append([roundName, score])

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

add = True
for line in lines:
    if roundName in line:
        line.append(score)
        add = False
if add: lines.append([roundName, score])

Если порядок не имеет значения, хотя было бы намного проще использовать словарь:

lines = {'geography':['8', '4', '7'], 'tv and cinema': [...] ...}

roundName = input("Enter the name of the round to add: ")
score = input("Enter the score for that round: ")

if roundName in lines: lines[roundName].append(score)
else: lines[roundName] = [score]
...