#python
#python
Вопрос:
Я хочу ввести строку элементов и составить один список с атомами и количеством этого атома. ["H3", "He4"]
Эти разделы работают, однако мне также нужно составить список только элементов. Это будет выглядеть примерно так ["H", "He"]
Однако, когда я пытаюсь разделить его на отдельные атомы, получается так. ["H", "H", "He"]
Вот мой текущий код для функции:
def molar_mass():
nums = "0123456789"
print("Please use the format H3 He4")
elements = input("Please leaves spaces between elements and their multipliers: ")
element_list = elements.split()
print(element_list)
elements_only_list = []
for element_pair in element_list:
for char in element_pair:
if char not in nums:
elements_only_list.append(char)
test = element_pair.split()
print(test)
print(elements_only_list)
Я знаю, что есть библиотека для чего-то подобного, однако я не хочу ее использовать.
Комментарии:
1. Если есть библиотека, почему бы вам не прочитать реализацию в библиотеке и не попробовать реализовать свою версию?
2. Я думаю, вам нужно будет создать полный список всех химических элементов и разделить их, начиная с самых длинных элементов (в противном случае скрипт будет думать, что у вас есть H для водорода, но вместо этого у вас есть He для гелия, например. Если вы начинаете с Helium, у вас не может быть проблемы).
3. Загляните в библиотеку регулярных
re
выражений для извлечения текстовых строк.4. Я использую это как опыт для обучения, и я очень новичок.
5. В чем ваша проблема? Вы хотите
elements_only_list
, чтобы список включал только уникальные элементы? Если это проблема, попробуйте использовать set дляelements_only_list
Также в чем смысл этой строки?test = element_pair.split()
Ответ №1:
Ваша проблема здесь в том, что вы добавляете каждый нечисловой символ в elements_only_list
качестве нового элемента этого списка. Вместо этого вы хотите получить часть element_pair
, содержащую нечисловые символы, и добавить эту строку в список. Простой способ сделать это — использовать rstrip
метод для удаления числовых символов из конца строки.
for element_pair in element_list:
element_only = element_pair.rstrip(nums)
elements_only_list.append(element_only)
Это также можно сделать с помощью регулярных выражений, но это сложнее, чем вам нужно прямо сейчас.
К вашему сведению, вам действительно не нужна ваша nums
переменная. string
Модуль содержит константы для различных стандартных групп символов. В этом случае вы могли бы импортировать string.digits
.
Комментарии:
1. Хотя это действительно хорошее предложение, я думаю, что числа могут появляться в любом месте химической формулы, такой как H2SO4
2. @Pitto это правда, но на основе предоставленного кода программа будет ожидать, что это будет вводиться с пробелами между элементами: H2 S O4.
Ответ №2:
Насколько я понимаю, у вас будет пользовательский ввод, такой как H3 He4, и ожидается, что результат будет [‘H’,’He’] , соответственно я изменил вашу функцию:
def molar_mass():
print("Please use the format H3 He4")
elements = input("Please leaves spaces between elements and their multipliers: ")
element_list = elements.split() # splits text to a list
print(element_list)
results = []
for elem in element_list: # loops over elements list
#seperate digits from characters in a list and replace digits with ''
el1 = list(map(lambda x: x if not x.isdigit() else '' , elem))
el2 = ''.join(el1)
results.append(el2)
return results
molar_mass()
используя эту функцию, с вводом, как показано ниже:
H3 He4
вывод будет:
['H','He']