Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -690,73 +690,6 @@ def view_image():
|
|
690 |
|
691 |
|
692 |
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
# Формат: {"Удобрение": {"Элемент1": доля, "Элемент2": доля, ...}}
|
698 |
-
fertilizers_db = {
|
699 |
-
"Кальциевая селитра": {
|
700 |
-
"N (NO3-)": 0.17, # 17% азота (NO3-)
|
701 |
-
"Ca": 0.24, # 24% кальция
|
702 |
-
},
|
703 |
-
"Сульфат магния": {
|
704 |
-
"Mg": 0.098, # 9.8% магния
|
705 |
-
"S": 0.13, # 13% серы
|
706 |
-
},
|
707 |
-
"Монофосфат калия": {
|
708 |
-
"P": 0.22, # 22% фосфора
|
709 |
-
"K": 0.28, # 28% калия
|
710 |
-
},
|
711 |
-
}
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
class HydroCalculator:
|
723 |
-
def __init__(self, volume_liters=1.0):
|
724 |
-
self.volume = volume_liters # Объём воды в литрах
|
725 |
-
self.fertilizers = [] # Список: (удобрение, граммы)
|
726 |
-
|
727 |
-
def add_fertilizer(self, name, grams):
|
728 |
-
"""Добавляет удобрение в раствор."""
|
729 |
-
if name not in fertilizers_db:
|
730 |
-
raise ValueError(f"Удобрение '{name}' не найдено в базе!")
|
731 |
-
self.fertilizers.append((name, grams))
|
732 |
-
|
733 |
-
def calculate_ppm(self):
|
734 |
-
"""Считает концентрации элементов в ppm (мг/литр)."""
|
735 |
-
ppm = {}
|
736 |
-
for name, grams in self.fertilizers:
|
737 |
-
for element, ratio in fertilizers_db[name].items():
|
738 |
-
ppm[element] = ppm.get(element, 0) + (grams * ratio * 1000) / self.volume
|
739 |
-
return ppm
|
740 |
-
|
741 |
-
def print_report(self):
|
742 |
-
"""Печатает красивый отчёт."""
|
743 |
-
ppm = self.calculate_ppm()
|
744 |
-
print("\nРезультат расчёта:")
|
745 |
-
print("-" * 40)
|
746 |
-
for element, value in ppm.items():
|
747 |
-
print(f"{element}: {value:.2f} ppm")
|
748 |
-
print("-" * 40)
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
class HydroCalculator:
|
761 |
def __init__(self, volume_liters=1.0):
|
762 |
self.volume = volume_liters
|
@@ -799,34 +732,45 @@ class HydroCalculator:
|
|
799 |
"""Точный расчёт EC по молярной проводимости"""
|
800 |
# Молярные массы (г/моль)
|
801 |
MOLAR_MASSES = {
|
802 |
-
'
|
803 |
-
'
|
804 |
'K': 39.1,
|
805 |
'Ca': 40.1,
|
806 |
'Mg': 24.3,
|
807 |
-
'
|
808 |
-
'
|
809 |
}
|
810 |
|
811 |
# Молярная проводимость (λ₀) в мкСм·см²/моль
|
812 |
ION_CONDUCTIVITY = {
|
813 |
-
'
|
814 |
-
'
|
815 |
-
'K': 73.5,
|
816 |
-
'Ca': 119.0,
|
817 |
-
'Mg': 106.0,
|
818 |
-
'
|
819 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
820 |
}
|
821 |
|
822 |
ppm = self.calculate_ppm()
|
823 |
ec = 0.0 # мкСм/см
|
824 |
|
825 |
for element, value in ppm.items():
|
826 |
-
if element in
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
|
831 |
return ec / 1000 # Переводим в mS/cm
|
832 |
|
@@ -836,31 +780,27 @@ class HydroCalculator:
|
|
836 |
ec_exact = self.calculate_ec_exact()
|
837 |
|
838 |
print("\nРезультаты расчёта:")
|
839 |
-
print("-" *
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
print(
|
845 |
-
print("
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
|
853 |
|
854 |
|
855 |
|
856 |
|
857 |
|
858 |
-
# Пример использования
|
859 |
calc = HydroCalculator(10) # 10 литров р��створа
|
860 |
calc.add_fertilizer("Кальциевая селитра", 100) # 100 г
|
861 |
calc.add_fertilizer("Сульфат магния", 50) # 50 г
|
|
|
862 |
|
863 |
-
# Вывод результатов
|
864 |
calc.print_report()
|
865 |
|
866 |
|
@@ -879,13 +819,6 @@ calc.print_report()
|
|
879 |
|
880 |
|
881 |
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
|
890 |
|
891 |
|
|
|
690 |
|
691 |
|
692 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
693 |
class HydroCalculator:
|
694 |
def __init__(self, volume_liters=1.0):
|
695 |
self.volume = volume_liters
|
|
|
732 |
"""Точный расчёт EC по молярной проводимости"""
|
733 |
# Молярные массы (г/моль)
|
734 |
MOLAR_MASSES = {
|
735 |
+
'NO3-': 62.0,
|
736 |
+
'NH4+': 18.0,
|
737 |
'K': 39.1,
|
738 |
'Ca': 40.1,
|
739 |
'Mg': 24.3,
|
740 |
+
'SO4--': 96.1,
|
741 |
+
'H2PO4-': 97.0,
|
742 |
}
|
743 |
|
744 |
# Молярная проводимость (λ₀) в мкСм·см²/моль
|
745 |
ION_CONDUCTIVITY = {
|
746 |
+
'NO3-': 71.4,
|
747 |
+
'NH4+': 73.5,
|
748 |
+
'K+': 73.5,
|
749 |
+
'Ca++': 119.0,
|
750 |
+
'Mg++': 106.0,
|
751 |
+
'SO4--': 160.0,
|
752 |
+
'H2PO4-': 33.0,
|
753 |
+
}
|
754 |
+
|
755 |
+
# Соответствие между элементами в базе и ионами
|
756 |
+
ELEMENT_TO_ION = {
|
757 |
+
'N (NO3-)': 'NO3-',
|
758 |
+
'N (NH4+)': 'NH4+',
|
759 |
+
'K': 'K+',
|
760 |
+
'Ca': 'Ca++',
|
761 |
+
'Mg': 'Mg++',
|
762 |
+
'S': 'SO4--',
|
763 |
+
'P': 'H2PO4-',
|
764 |
}
|
765 |
|
766 |
ppm = self.calculate_ppm()
|
767 |
ec = 0.0 # мкСм/см
|
768 |
|
769 |
for element, value in ppm.items():
|
770 |
+
if element in ELEMENT_TO_ION:
|
771 |
+
ion = ELEMENT_TO_ION[element]
|
772 |
+
molarity = value / (MOLAR_MASSES[ion] * 1000) # ppm → моль/л
|
773 |
+
ec += molarity * ION_CONDUCTIVITY[ion]
|
774 |
|
775 |
return ec / 1000 # Переводим в mS/cm
|
776 |
|
|
|
780 |
ec_exact = self.calculate_ec_exact()
|
781 |
|
782 |
print("\nРезультаты расчёта:")
|
783 |
+
print("-" * 50)
|
784 |
+
print("{:<15} {:>10} {:>15}".format("Элемент", "ppm", "мг/л"))
|
785 |
+
print("-" * 50)
|
786 |
+
for element, value in sorted(ppm.items()):
|
787 |
+
print("{:<15} {:>10.2f} {:>15.2f}".format(element, value, value))
|
788 |
+
print("-" * 50)
|
789 |
+
print("Электропроводность:")
|
790 |
+
print(f"Упрощённый метод: {ec_simple:.2f} mS/cm")
|
791 |
+
print(f"Точный метод: {ec_exact:.2f} mS/cm")
|
792 |
+
print("-" * 50)
|
|
|
|
|
|
|
793 |
|
794 |
|
795 |
|
796 |
|
797 |
|
798 |
|
|
|
799 |
calc = HydroCalculator(10) # 10 литров р��створа
|
800 |
calc.add_fertilizer("Кальциевая селитра", 100) # 100 г
|
801 |
calc.add_fertilizer("Сульфат магния", 50) # 50 г
|
802 |
+
calc.add_fertilizer("Монофосфат калия", 30) # 30 г
|
803 |
|
|
|
804 |
calc.print_report()
|
805 |
|
806 |
|
|
|
819 |
|
820 |
|
821 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
822 |
|
823 |
|
824 |
|