- Я предлагаю использовать регулярные выражения , чтобы разбить каждый вход на подстроку
name
и подстроку number
, основываясь на следующем шаблоне, который мы предполагаем, что каждый вход следует:
<name>-<number>
или просто <name>
.
Посмотрите на пакет re для деталей и точного синтаксиса, но это то, что мой
pattern = "(?P<name>\w+)(?P<number>-\d*)?"
строка делает.
Переход с dict
был действительно хорошей идеей, я использую словарь для хранения найденных чисел и постепенно сохраняю только максимальное значение, встречающееся для каждого ввода.
Когда я закончу анализировать каждый ввод, я снова анализирую их все, используя метод словарей .items()
, чтобы распечатать нужные данные.
Вот пример кода, который я получилс суммированием:
import re
inputs = ["anna-1", "anna", "anna-0", "michael", "anna-2"]
pattern = "(?P<name>\w+)(?P<number>-\d*)?"
maxNumbers = {} # Remembers the maximum number for each name
# Parse all inputs and split them into name and number
for item in inputs:
result = re.match(pattern, item)
# Extract the name
name = result.group("name")
# Extract the number (set to zero if there is no number)
number = result.group("number")
if number == None:
number = 0
else:
number = int(number[1:])
# Store the number in the dictionary
if name not in maxNumbers:
maxNumbers[name] = number
else:
maxNumbers[name] = max(maxNumbers[name], number)
# Parse all names and print their maximum number
for name, maxNumber in maxNumbers.items():
if maxNumber == 0:
print(name)
else:
print(name + "-" + str(maxNumber))
Обратите внимание, что вы не указали, как программа должна реагировать, если ввод
anna
anna-0
Должен ли он печатать anna-0
или просто anna
? Но это вы сможете исправить самостоятельно.