Всем привет! Получил задание в вузе с таким условием:
Существует такая игра, в которой химические элементы выстраиваются в длинную цепочку таким образом, чтобы каждое очередное слово на- чиналось на букву, на которую заканчивается предыдущее. Например, если последовательность начинается с элемента Hydrogen, то следующий элемент должен начинаться на N, и это может быть Nickel. Следом может идти Lithium. При этом элементы в ряду не должны повторяться. При игре в одиночку целью является составление списка элементов максимально возможной длины. Если в игре принимают участие двое, то целью стано- вится назвать такой химический элемент, чтобы оппонент не смог про-
должить последовательность.
Напишите программу, которая будет запрашивать у пользователя
химический элемент и при помощи рекурсивной функции определять максимально возможную последовательность слов. Выведите на экран полученный ряд. Удостоверьтесь, что программа выводит соответствующее сообщение об ошибке, если пользователь укажет несуществующий химический элемент.
Написал код, но нужный результат не выводится. Не понимаю в чём причина и как это можно исправить. Подскажите, пожалуйста! Фунцкию swap_elements добавил просто для личного удобства. Особо она никак не влияет на код, кроме проверки на существование элемента в списке.
elements_list = [
"Hydrogen", "Helium", "Lithium", "Beryllium", "Boron", "Carbon", "Nitrogen", "Oxygen", "Fluorine",
"Neon", "Sodium", "Magnesium", "Aluminum", "Silicon", "Phosphorus", "Sulfur", "Chlorine", "Argon",
"Potassium", "Calcium", "Scandium", "Titanium", "Vanadium", "Chromium", "Manganese", "Iron", "Cobalt",
"Nickel", "Copper", "Zinc", "Gallium", "Germanium", "Arsenic", "Selenium", "Bromine", "Krypton",
"Rubidium", "Strontium", "Yttrium", "Zirconium", "Niobium", "Molybdenum", "Technetium", "Ruthenium",
"Rhodium", "Palladium", "Silver", "Cadmium", "Indium", "Tin", "Antimony", "Tellurium", "Iodine",
"Xenon", "Cesium", "Barium", "Lanthanum", "Cerium", "Praseodymium", "Neodymium", "Promethium", "Samarium",
"Europium", "Gadolinium", "Terbium", "Dysprosium", "Holmium", "Erbium", "Thulium", "Ytterbium", "Lutetium",
"Hafnium", "Tantalum", "Tungsten", "Rhenium", "Osmium", "Iridium", "Platinum", "Gold", "Mercury", "Thallium",
"Lead", "Bismuth", "Polonium", "Astatine", "Radon", "Francium", "Radium", "Actinium", "Thorium", "Protactinium",
"Uranium", "Neptunium", "Plutonium", "Americium", "Curium", "Berkelium", "Californium", "Einsteinium", "Fermium",
"Mendelevium", "Nobelium", "Lawrencium", "Rutherfordium", "Dubnium", "Seaborgium", "Bohrium", "Hassium",
"Meitnerium", "Darmstadtium", "Roentgenium", "Copernicium", "Nihonium", "Flerovium", "Moscovium", "Livermorium",
"Tennessine", "Oganesson"
]
def swap_elements(elements_list,user_input):
if user_input in elements_list:
index = elements_list.index(user_input)
new_list = list(elements_list) # Создаем копию списка
new_list[0], new_list[index] = new_list[index], new_list[0]
return new_list # Возвращаем новый список
else:
print("Ошибка ввода")
return None
user_input = input("Введите название элемента: ").capitalize()
new_elements_list = swap_elements(elements_list,user_input) # Изменённый список
def find_max_sequence(start_element,elements,sequence):
if sequence == None:
sequence = []
next_letter = start_element[-1]
max_sequence = []
for element in elements:
if element not in sequence and element.startswith(next_letter):
new_sequence = sequence + [element]
new_max_sequence = find_max_sequence(element,elements,new_sequence)
if len(new_max_sequence) > len(max_sequence):
max_sequence = new_max_sequence
return max_sequence
print(find_max_sequence(user_input,elements_list,sequence = None))