Найти - Пользователи
Полная версия: Баланс Химических Уравнений
Начало » Python для новичков » Баланс Химических Уравнений
1
RiRaiTo_X
Хочу создать программу для сбалансирования химических уравнений, независимо от его длины.
 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
doza_and
RiRaiTo_X
но дальше просто ничего не смогу поделать.
Непонятно для чего вы вообще сделали этот код и как его планируете использовать.

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

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

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

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

https://pythonhosted.org/chempy/#balancing-stoichiometry-of-a-chemical-reaction
PEHDOM
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 )
может что пригодится..

Rafik
Мне думается, первым делом, в ОВР, надо для элементов с переменной валентностью выровнять показатель валентность*коэффициент и потом подбирать остальные коэффициенты.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB