DmitrMakeev commited on
Commit
881b5d2
·
verified ·
1 Parent(s): bc33424

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -113
app.py CHANGED
@@ -798,123 +798,41 @@ class HydroCalculator:
798
 
799
  return ec / 1000 # переводим в mS/cm
800
 
801
- class HydroCalculator:
802
- def __init__(self, volume_liters=1.0):
803
- self.volume = volume_liters
804
- self.fertilizers = []
805
-
806
- def add_fertilizer(self, name, grams):
807
- if name not in fertilizers_db:
808
- raise ValueError(f"Удобрение '{name}' не найдено в базе!")
809
- self.fertilizers.append((name, grams))
810
-
811
- def calculate_ppm(self):
812
- ppm = {}
813
- for name, grams in self.fertilizers:
814
- for element, ratio in fertilizers_db[name].items():
815
- ppm[element] = ppm.get(element, 0) + (grams * ratio * 1000) / (self.volume * 10)
816
- return ppm
817
-
818
- def calculate_ppm_ec(self):
819
- ppm_ec = {}
820
- for name, grams in self.fertilizers:
821
- for element, ratio in fertilizers_db[name].items():
822
- ppm_ec[element] = ppm_ec.get(element, 0) + (grams * ratio * 1000)
823
- return ppm
824
-
825
- def calculate_ec(self):
826
- ppm_ec = self.calculate_ppm_ec()
827
- ec = 0.0
828
- EC_COEFFICIENTS = {
829
- 'N (NO3-)': 0.6,
830
- 'N (NH4+)': 0.4,
831
- 'K': 0.7,
832
- 'Ca': 0.75,
833
- 'Mg': 0.6,
834
- 'S': 0.3,
835
- 'P': 0.1,
836
- }
837
- for element, value in ppm.items():
838
- if element in EC_COEFFICIENTS:
839
- ec += value * EC_COEFFICIENTS[element]
840
- return ec / 1000
841
-
842
- def calculate_ec_exact(self):
843
- MOLAR_MASSES = {
844
- 'NO3-': 62.0,
845
- 'NH4+': 18.0,
846
- 'K+': 39.1,
847
- 'Ca+2': 40.1,
848
- 'Mg+2': 24.3,
849
- 'SO4-2': 96.1,
850
- 'H2PO4-': 97.0,
851
- }
852
- ION_CONDUCTIVITY = {
853
- 'NO3-': 71.4,
854
- 'NH4+': 73.5,
855
- 'K+': 73.5,
856
- 'Ca+2': 119.0,
857
- 'Mg+2': 106.0,
858
- 'SO4-2': 160.0,
859
- 'H2PO4-': 33.0,
860
- }
861
- ELEMENT_TO_ION = {
862
- 'N (NO3-)': 'NO3-',
863
- 'N (NH4+)': 'NH4+',
864
- 'K': 'K+',
865
- 'Ca': 'Ca+2',
866
- 'Mg': 'Mg+2',
867
- 'S': 'SO4-2',
868
- 'P': 'H2PO4-',
869
- }
870
-
871
  ppm = self.calculate_ppm()
872
- ec = 0.0 # µS/cm
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
873
 
874
- for element, value in ppm.items():
875
- if element in ELEMENT_TO_ION:
876
- ion = ELEMENT_TO_ION[element]
877
- molar_mass = MOLAR_MASSES[ion]
878
- conductivity = ION_CONDUCTIVITY[ion]
879
- mmol_per_liter = value / molar_mass
880
- ec += mmol_per_liter * conductivity
881
-
882
- return ec # ← БЕЗ деления на 1000
883
-
884
- def print_report(self):
885
- ppm = self.calculate_ppm()
886
- ec_simple = self.calculate_ec()
887
- ec_exact = self.calculate_ec_exact()
888
-
889
- print("\n" + "="*50)
890
- print("ТАБЛИЦА КОНЦЕНТРАЦИЙ ЭЛЕМЕНТОВ")
891
- print("="*50)
892
- print("{:<15} {:>15} {:>15}".format("Элемент", "Конц. (ppm)", "Конц. (мг/л)"))
893
- print("-"*50)
894
- for element, value in sorted(ppm.items()):
895
- print("{:<15} {:>15.2f} {:>15.2f}".format(element, value, value))
896
- print("="*50)
897
-
898
- print("\n" + "="*50)
899
- print("АНАЛИЗ АЗОТНЫХ СОЕДИНЕНИЙ")
900
- print("="*50)
901
- print(f"Общий азот (N): {ppm.get('N (NO3-)', 0) + ppm.get('N (NH4+)', 0):.2f} ppm")
902
- print(f"Нитратный азот (NO3-): {ppm.get('N (NO3-)', 0):.2f} ppm")
903
- print(f"Аммонийный азот (NH4+): {ppm.get('N (NH4+)', 0):.2f} ppm")
904
- print("="*50)
905
-
906
- print("\n" + "="*50)
907
- print("ЭЛЕКТРОПРОВОДНОСТЬ РАСТВОРА")
908
- print("="*50)
909
- print(f"EC: {ec_simple:.2f} mS/cm")
910
- print(f"EC (точный): {ec_exact:.2f} mS/cm")
911
- print("="*50)
912
-
913
-
914
-
915
 
916
  # Пример использования с правильными названиями удобрений
917
- calc = HydroCalculator(10) # 10 литров раствора
918
 
919
  # Добавляем удобрения с правильными названиями и адекватными количествами
920
  calc.add_fertilizer("Кальциевая селитра", 5) # 10 г
 
798
 
799
  return ec / 1000 # переводим в mS/cm
800
 
801
+ def print_report(self):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
802
  ppm = self.calculate_ppm()
803
+ ec_simple = self.calculate_ec()
804
+ ec_exact = self.calculate_ec_exact()
805
+
806
+ # Вывод основной таблицы элементов
807
+ print("\n" + "="*50)
808
+ print("ТАБЛИЦА КОНЦЕНТРАЦИЙ ЭЛЕМЕНТОВ")
809
+ print("="*50)
810
+ print("{:<15} {:>15} {:>15}".format("Элемент", "Конц. (ppm)", "Конц. (мг/л)"))
811
+ print("-"*50)
812
+ for element, value in sorted(ppm.items()):
813
+ print("{:<15} {:>15.2f} {:>15.2f}".format(element, value, value))
814
+ print("="*50)
815
+
816
+ # Вывод данных по азоту
817
+ print("\n" + "="*50)
818
+ print("АНАЛИЗ АЗОТНЫХ СОЕДИНЕНИЙ")
819
+ print("="*50)
820
+ print(f"Общий азот (N): {ppm.get('N (NO3-)', 0) + ppm.get('N (NH4+)', 0):.2f} ppm")
821
+ print(f"Нитратный азот (NO3-): {ppm.get('N (NO3-)', 0):.2f} ppm")
822
+ print(f"Аммонийный азот (NH4+): {ppm.get('N (NH4+)', 0):.2f} ppm")
823
+ print("="*50)
824
+
825
+ # Вывод электропроводности
826
+ print("\n" + "="*50)
827
+ print("ЭЛЕКТРОПРОВОДНОСТЬ РАСТВОРА")
828
+ print("="*50)
829
+ print(f"EC: {ec_simple:.2f} mS/cm")
830
+ print("="*50)
831
 
832
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
833
 
834
  # Пример использования с правильными названиями удобрений
835
+ calc = HydroCalculator(10)
836
 
837
  # Добавляем удобрения с правильными названиями и адекватными количествами
838
  calc.add_fertilizer("Кальциевая селитра", 5) # 10 г