DmitrMakeev commited on
Commit
e610130
·
verified ·
1 Parent(s): 1987ff9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -104
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
- 'N (NO3-)': 62.0,
803
- 'N (NH4+)': 18.0,
804
  'K': 39.1,
805
  'Ca': 40.1,
806
  'Mg': 24.3,
807
- 'S': 96.1,
808
- 'P': 95.0,
809
  }
810
 
811
  # Молярная проводимость (λ₀) в мкСм·см²/моль
812
  ION_CONDUCTIVITY = {
813
- 'N (NO3-)': 71.4,
814
- 'N (NH4+)': 73.5,
815
- 'K': 73.5,
816
- 'Ca': 119.0,
817
- 'Mg': 106.0,
818
- 'S': 160.0,
819
- 'P': 33.0,
 
 
 
 
 
 
 
 
 
 
 
820
  }
821
 
822
  ppm = self.calculate_ppm()
823
  ec = 0.0 # мкСм/см
824
 
825
  for element, value in ppm.items():
826
- if element in MOLAR_MASSES:
827
- molarity = value / (MOLAR_MASSES[element] * 1000) # ppm → моль/л
828
- if element in ION_CONDUCTIVITY:
829
- ec += molarity * ION_CONDUCTIVITY[element]
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("-" * 40)
840
- for element, value in ppm.items():
841
- print(f"{element}: {value:.2f} ppm")
842
- print("-" * 40)
843
- print(f"EC (упрощённый): {ec_simple:.2f} mS/cm")
844
- print(f"EC (точный): {ec_exact:.2f} mS/cm")
845
- print("-" * 40)
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