Уведомления

Группа в Telegram: присоединиться

#1 Фев. 11, 2020 19:54:44

RiRaiTo_X
Зарегистрирован: 2020-02-11
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Баланс Химических Уравнений

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

 def elements():
    H = 1
    He = 1
    Li = 1
    Be = 1
    B = 1
    C = 1
    N = 1
    O = 1
    F = 1
    Ne = 1
    Na = 1
    Mg = 1
    Al = 1
    Si = 1
    P = 1
    S = 1
    Cl = 1
    Ar = 1
    K = 1
    Ca = 1
    Sc = 1
    Ti = 1
    V = 1
    Cr = 1
    Mn = 1
    Fe = 1
    Co = 1
    Ni = 1
    Cu = 1
    Zn = 1
    Ga = 1
    Ge = 1
    As = 1
    Se = 1
    Br = 1
    Kr = 1
    Rb = 1
    Sr = 1
    Y = 1
    Zr = 1
    Nb = 1
    Mo = 1
    Tc = 1
    Ru = 1
    Rh = 1
    Pd = 1
    Ad = 1
    Cd = 1
    return Ad, Al, Ar, As, B, Be, Br, C, Ca, Cd, Cl, Co, Cr, Cu, F, Fe, Ga, Ge, H, He, K, Kr, Li, Mg, Mn, Mo, N, Na, Nb, Ne, Ni, O, P, Pd, Rb, Rh, Ru, S, Sc, Se, Si, Sr, Tc, Ti, V, Y, Zn, Zr
Ad, Al, Ar, As, B, Be, Br, C, Ca, Cd, Cl, Co, Cr, Cu, F, Fe, Ga, Ge, H, He, K, Kr, Li, Mg, Mn, Mo, N, Na, Nb, Ne, Ni, O, P, Pd, Rb, Rh, Ru, S, Sc, Se, Si, Sr, Tc, Ti, V, Y, Zn, Zr = elements()
a, b = (input() for _ in range(2))
if eval(a) == eval(b):
    print(a, "=", b)
else:
    print(a, "!=", b)
    ...
    ...

Сделал как-то так, но дальше просто ничего не смогу поделать.
Для примера, чтобы смогла сбалансировать:
K4Fe(CN)6 + KMnO4 + H2SO4 = KHSO4 + Fe2(SO4)3 + MnSO4 + HNO3 + CO2 + H2O

Офлайн

#2 Фев. 11, 2020 23:11:53

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 3549
Репутация: +  204  -
Профиль   Отправить e-mail  

Баланс Химических Уравнений

RiRaiTo_X
но дальше просто ничего не смогу поделать.
Непонятно для чего вы вообще сделали этот код и как его планируете использовать.

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



Офлайн

#3 Фев. 12, 2020 01:56:55

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

Баланс Химических Уравнений

RiRaiTo_X
Хочу создать программу для сбалансирования химических уравнений
Одного хотения мало для этого. Это надо уметь программировать. А чтобы уметь программировать, надо учиться программировать.

Это так же, как в химии. Чтобы собрать ядерную бомбу, нужно получить ядерное вещество. Чтобы получить ядерное вещество, нужно уметь химичить. А чтобы уметь химичить, надо учиться химичить.

RiRaiTo_X
Для примера, чтобы смогла сбалансировать:
Эта задача вполне решаема, только вот своё представлении о коде, который нужно получить в итоге, можешь умножить на десять. А чтобы его получить - код, который умеет это делать, - нужно уметь программировать и плюс ещё питон знать. Это ещё и разные вещи - уметь программировать и уметь на питоне какой-то код записывать.



Офлайн

#4 Фев. 12, 2020 07:56:36

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 171
Репутация: +  19  -
Профиль   Отправить e-mail  

Баланс Химических Уравнений

Для уравнивания таких реакций:

RiRaiTo_X
K4Fe(CN)6 + KMnO4 + H2SO4 = KHSO4 + Fe2(SO4)3 + MnSO4 + HNO3 + CO2 + H2O
может быть имеет смысл использовать таблицу полуреакций? Обычно такой способ уравнивания вручную проще, чем другие.

Перво-наперво разработайте алгоритм подбора и причешите его, потом уже будете писать код. Хорошо разработанный алгоритм - это 90% гарантии хорошего и оптимального кода, который будет работать более-менее нормально почти сразу.

Отредактировано Rafik (Фев. 12, 2020 07:57:19)

Офлайн

#5 Фев. 12, 2020 10:05:46

Slow
Зарегистрирован: 2017-07-26
Сообщения: 87
Репутация: +  4  -
Профиль   Отправить e-mail  

Баланс Химических Уравнений

Не изобретайте велосипеды, есть же хемпай

https://pythonhosted.org/chempy/#balancing-stoichiometry-of-a-chemical-reaction

Офлайн

#6 Фев. 12, 2020 10:14:14

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 1554
Репутация: +  219  -
Профиль   Отправить e-mail  

Баланс Химических Уравнений

RiRaiTo_X
Сделал как-то так, но дальше просто ничего не смогу поделать.
Для примера, чтобы смогла сбалансировать:
K4Fe(CN)6 + KMnO4 + H2SO4 = KHSO4 + Fe2(SO4)3 + MnSO4 + HNO3 + CO2 + H2O
Ну читаем про балансировку: https://ru.wikihow.com/%D0%B1%D0%B0%D0%BB%D0%B0%D0%BD%D1%81%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D1%85%D0%B8%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5-%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F
смотрим метод 2: “Алгебраический метод” видим что все сводиться к решению системы линейных целочисленных уравнений. Система имеет несколько решений, так как переменных больше, чем уравнений. Необходимо найти такое решение, чтобы все коэффициенты имели вид минимально возможных целых чисел.
вот тут есть немного решений: https://stackoverflow.com/questions/45220032/how-to-balance-a-chemical-equation-in-python-2-7-using-matrices/52118939#52118939 (искал по решению системы уравнений, нашел по балансировке хим формул O_o )
может что пригодится..

Офлайн

#7 Фев. 12, 2020 11:26:50

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 171
Репутация: +  19  -
Профиль   Отправить e-mail  

Баланс Химических Уравнений

Мне думается, первым делом, в ОВР, надо для элементов с переменной валентностью выровнять показатель валентность*коэффициент и потом подбирать остальные коэффициенты.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version