DmitrMakeev commited on
Commit
c9200e9
·
verified ·
1 Parent(s): 47c5562

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -35
app.py CHANGED
@@ -681,20 +681,19 @@ def view_image():
681
 
682
 
683
 
684
-
685
- # Формат: {"Удобрение": {"Элемент1": доля, "Элемент2": доля, ...}}
686
  fertilizers_db = {
687
  "Кальциевая селитра": {
688
  "N (NO3-)": 0.17, # 17% азота (NO3-)
689
  "Ca": 0.24, # 24% кальция
690
  },
691
  "Сульфат магния": {
692
- "Mg": 0.098, # 9.8% магния
693
- "S": 0.13, # 13% серы
694
  },
695
  "Монофосфат калия": {
696
- "P": 0.22, # 22% фосфора
697
- "K": 0.28, # 28% калия
698
  },
699
  }
700
 
@@ -716,10 +715,9 @@ class HydroCalculator:
716
  return ppm
717
 
718
  def calculate_ec(self):
719
- """Расчёт EC по упрощённым коэффициентам"""
720
  ppm = self.calculate_ppm()
721
  ec = 0.0
722
-
723
  EC_COEFFICIENTS = {
724
  'N (NO3-)': 0.6,
725
  'N (NH4+)': 0.4,
@@ -729,16 +727,14 @@ class HydroCalculator:
729
  'S': 0.3,
730
  'P': 0.1,
731
  }
732
-
733
  for element, value in ppm.items():
734
  if element in EC_COEFFICIENTS:
735
  ec += value * EC_COEFFICIENTS[element]
736
-
737
- return ec / 1000 # Переводим в mS/cm
738
 
739
  def calculate_ec_exact(self):
740
- """Точный расчёт EC по молярной проводимости с правильным учётом заряда"""
741
- # Молярные массы ионов (г/моль)
742
  MOLAR_MASSES = {
743
  'NO3-': 62.0,
744
  'NH4+': 18.0,
@@ -748,8 +744,7 @@ class HydroCalculator:
748
  'SO4-2': 96.1,
749
  'H2PO4-': 97.0,
750
  }
751
-
752
- # Молярная проводимость ионов (мкСм·см²/моль) при 25°C
753
  ION_CONDUCTIVITY = {
754
  'NO3-': 71.4,
755
  'NH4+': 73.5,
@@ -759,8 +754,7 @@ class HydroCalculator:
759
  'SO4-2': 160.0,
760
  'H2PO4-': 33.0,
761
  }
762
-
763
- # Соответствие элементов удобрения ионам
764
  ELEMENT_TO_ION = {
765
  'N (NO3-)': 'NO3-',
766
  'N (NH4+)': 'NH4+',
@@ -770,26 +764,22 @@ class HydroCalculator:
770
  'S': 'SO4-2',
771
  'P': 'H2PO4-',
772
  }
773
-
774
  ppm = self.calculate_ppm()
775
- ec = 0.0 # мкСм/см
776
-
777
- for element, value in ppm.items():
778
  if element in ELEMENT_TO_ION:
779
  ion = ELEMENT_TO_ION[element]
780
- # Конвертируем ppm (мг/л) в моль/л
781
- molarity = (value / 1000) / MOLAR_MASSES[ion]
782
- # Для двухзарядных ионов проводимость уже учтена в табличных значениях
783
- # НЕ умножаем на заряд!
784
- ec += molarity * ION_CONDUCTIVITY[ion]
785
-
786
- return ec / 1000 # Переводим в mS/cm
787
 
788
  def print_report(self):
789
  ppm = self.calculate_ppm()
790
  ec_simple = self.calculate_ec()
791
  ec_exact = self.calculate_ec_exact()
792
-
793
  print("\nРезультаты расчёта:")
794
  print("-" * 50)
795
  print("{:<15} {:>10} {:>15}".format("Элемент", "ppm", "мг/л"))
@@ -797,18 +787,20 @@ class HydroCalculator:
797
  for element, value in sorted(ppm.items()):
798
  print("{:<15} {:>10.2f} {:>15.2f}".format(element, value, value))
799
  print("-" * 50)
800
- print("Электропроводность:")
801
  print(f"Упрощённый метод: {ec_simple:.2f} mS/cm")
802
  print(f"Точный метод: {ec_exact:.2f} mS/cm")
803
  print("-" * 50)
804
 
 
805
  # Пример использования
806
- calc = HydroCalculator(10) # 10 литров раствора
807
- calc.add_fertilizer("Кальциевая селитра", 100) # 100 г
808
- calc.add_fertilizer("Сульфат магния", 50) # 50 г
809
- calc.add_fertilizer("Монофосфат калия", 30) # 30 г
 
 
810
 
811
- calc.print_report()
812
 
813
 
814
 
 
681
 
682
 
683
 
684
+ # База данных удобрений: доли содержания элементов
 
685
  fertilizers_db = {
686
  "Кальциевая селитра": {
687
  "N (NO3-)": 0.17, # 17% азота (NO3-)
688
  "Ca": 0.24, # 24% кальция
689
  },
690
  "Сульфат магния": {
691
+ "Mg": 0.098, # 9.8% магния
692
+ "S": 0.13, # 13% серы
693
  },
694
  "Монофосфат калия": {
695
+ "P": 0.22, # 22% фосфора
696
+ "K": 0.28, # 28% калия
697
  },
698
  }
699
 
 
715
  return ppm
716
 
717
  def calculate_ec(self):
718
+ """Упрощённый расчёт EC на основе эмпирических коэффициентов"""
719
  ppm = self.calculate_ppm()
720
  ec = 0.0
 
721
  EC_COEFFICIENTS = {
722
  'N (NO3-)': 0.6,
723
  'N (NH4+)': 0.4,
 
727
  'S': 0.3,
728
  'P': 0.1,
729
  }
 
730
  for element, value in ppm.items():
731
  if element in EC_COEFFICIENTS:
732
  ec += value * EC_COEFFICIENTS[element]
733
+ return ec / 1000 # mS/cm
 
734
 
735
  def calculate_ec_exact(self):
736
+ """Точный расчёт EC на основе молярной проводимости и молярной концентрации"""
737
+ # Молярные массы (г/моль)
738
  MOLAR_MASSES = {
739
  'NO3-': 62.0,
740
  'NH4+': 18.0,
 
744
  'SO4-2': 96.1,
745
  'H2PO4-': 97.0,
746
  }
747
+ # Молярная проводимость ионов (мкСм·см²/моль)
 
748
  ION_CONDUCTIVITY = {
749
  'NO3-': 71.4,
750
  'NH4+': 73.5,
 
754
  'SO4-2': 160.0,
755
  'H2PO4-': 33.0,
756
  }
757
+ # Соответствие элементов ионам
 
758
  ELEMENT_TO_ION = {
759
  'N (NO3-)': 'NO3-',
760
  'N (NH4+)': 'NH4+',
 
764
  'S': 'SO4-2',
765
  'P': 'H2PO4-',
766
  }
 
767
  ppm = self.calculate_ppm()
768
+ ec = 0.0
769
+ for element, ppm_value in ppm.items():
 
770
  if element in ELEMENT_TO_ION:
771
  ion = ELEMENT_TO_ION[element]
772
+ molar_mass = MOLAR_MASSES[ion]
773
+ conductivity = ION_CONDUCTIVITY[ion]
774
+ mol_per_liter = (ppm_value / 1000) / molar_mass
775
+ ec += mol_per_liter * conductivity
776
+ return ec / 1000 # Перевод в mS/cm
 
 
777
 
778
  def print_report(self):
779
  ppm = self.calculate_ppm()
780
  ec_simple = self.calculate_ec()
781
  ec_exact = self.calculate_ec_exact()
782
+
783
  print("\nРезультаты расчёта:")
784
  print("-" * 50)
785
  print("{:<15} {:>10} {:>15}".format("Элемент", "ppm", "мг/л"))
 
787
  for element, value in sorted(ppm.items()):
788
  print("{:<15} {:>10.2f} {:>15.2f}".format(element, value, value))
789
  print("-" * 50)
790
+ print("Электропроводность (EC):")
791
  print(f"Упрощённый метод: {ec_simple:.2f} mS/cm")
792
  print(f"Точный метод: {ec_exact:.2f} mS/cm")
793
  print("-" * 50)
794
 
795
+
796
  # Пример использования
797
+ if __name__ == "__main__":
798
+ calc = HydroCalculator(10) # Объём раствора: 10 литров
799
+ calc.add_fertilizer("Кальциевая селитра", 100) # 100 г
800
+ calc.add_fertilizer("Сульфат магния", 50) # 50 г
801
+ calc.add_fertilizer("Монофосфат калия", 30) # 30 г
802
+ calc.print_report()
803
 
 
804
 
805
 
806