Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Python для новичков
  • » Вам дан список молекул и их атомная масса Посчитайте молярную массу молекул, используя методы функционального программирования. Выведите значения в порядке возрастания молярной массы. [RSS Feed]

#1 Ноя. 14, 2024 00:23:50

ant976
Зарегистрирован: 2024-08-14
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Спасибо большое!

Офлайн

#2 Ноя. 14, 2024 09:23:32

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1349
Репутация: +  118  -
Профиль   Отправить e-mail  

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

py.user.next
Я добавил соляную кислоту в код xam1816
CL - так не записывают хим.элементы, иначе СO - это угарный газ или кобальт?

NO и No cсоответственно оксид азота и нобелий

Офлайн

#3 Ноя. 14, 2024 11:03:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9852
Репутация: +  853  -
Профиль   Отправить e-mail  

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

xam1816
CL - так не записывают хим.элементы, иначе СO - это угарный газ или кобальт?

NO и No cсоответственно оксид азота и нобелий
ant976
Входные данные
список формул молекул:
['H2-S-O4', 'H2-O', 'NA-CL', 'H-CL', 'K-CL']
ant976
Вывод программы

H2-O 18.015
H-CL 36.461
NA-CL 58.443
K-CL 74.551
H2-S-O4 98.078
Как видишь, по условию задачи натрий и хлор подаются на вход алгоритма в верхнем регистре. Значит, задача определяет свой язык формул на входе. Как видишь, в серной кислоте у него разделены сера и кислород, хотя обычно их пишут слитно, так как считают сульфатом. Так что можно предположить, что в этом языке входных формул алгоритма кобальт будет так же изолирован в отдельный атом через дефис, а в монооксиде углерода углерод и кислород будут разделены дефисом. Благодаря этому коллизии не будет.



Офлайн

#4 Ноя. 14, 2024 12:17:30

vic57
Зарегистрирован: 2015-07-07
Сообщения: 899
Репутация: +  126  -
Профиль   Отправить e-mail  

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

py.user.next
 улучшенная версия с обработкой ошибок

 import re
d ={}
d['H'] = 1.008
d['O'] = 15.999
d['S'] = 32.066
d['NA'] = 22.990
d['CL'] = 35.453
d['K'] = 39.098
d['C'] = 10
d['L'] = 5#пример
arr = ['H2-S-O4','H-CL','NA-CL','Y-CL','K-CL','H2-O','C-O2','H2U']
            
def mass(d,i):
    t = i.split('-')
    summ = 0
    for j in t:
        match = re.search(r'\d',j)
        if match:
            idx = match.start()
            m,n = j[:idx],j[idx:]
        else: m,n = j,1
        try: 
            summ += d[m]*int(n)
        except:
            summ = -1
            i='Error:'+ i
            break
    return i,round(summ,3)
out = []
for i in arr: out.append(mass(d,i))
out.sort(key=lambda x: x[1])
for i in out: print('{0:24}{1:>5}'.format(*i))

Отредактировано vic57 (Ноя. 14, 2024 12:18:25)

Офлайн

#5 Ноя. 14, 2024 18:18:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9852
Репутация: +  853  -
Профиль   Отправить e-mail  

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

vic57
улучшенная версия с обработкой ошибок
Сначала надо удалить ошибки из списка и составить чистый список, в котором все молекулы без ошибок, а потом подавать этот чистый список в алгоритм, который не занимается ничем посторонним, а только преобразует молекулы в молярные массы.

У тебя получилось, что ошибки участвуют в сортировке. Если там будет миллион молекул в списке и не будет ни одной правильной молекулы, то твой алгоритм будет сортировать миллион ошибок. То есть алгоритм будет сортировать ошибки.

Так вот, в реальных пограммах, когда ты их пишешь и они для чего-то нужны, не для обучения и не для развлечения или тренировки в кодинге, ошибки обычно нужно записать в отдельный журнал ошибок, чтобы потом прийти в конце месяца или полугодия туда, где установлена программа физически, и прочитать всё то, чем занимались какие-то учёные химики и когда, кто и почему там наделал неправильных формул. Бывает так, что программы следят за людьми, а бывает так, что программы следят за программами. То есть журналирование проводится не просто так, не ради прикола, а оно может быть единственным способом узнать, что что-то происходило когда-то.

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


tags: function errors



Отредактировано py.user.next (Ноя. 14, 2024 18:28:16)

Офлайн

  • Начало
  • » Python для новичков
  • » Вам дан список молекул и их атомная масса Посчитайте молярную массу молекул, используя методы функционального программирования. Выведите значения в порядке возрастания молярной массы.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version