DmitrMakeev commited on
Commit
aca6502
·
verified ·
1 Parent(s): 4322a52

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +69 -83
app.py CHANGED
@@ -683,35 +683,6 @@ def view_image():
683
 
684
 
685
 
686
- from tabulate import tabulate
687
-
688
- # Константы для расчёта
689
- TOTAL_NITROGEN = 125 # ppm
690
- NO3_RATIO = 8.25 # Доля нитратного азота
691
- NH4_RATIO = 1.00 # Доля аммонийного азота
692
- VOLUME_LITERS = 10 # Объём раствора
693
-
694
- # Базовый профиль (7 элементов)
695
- BASE_PROFILE = {
696
- 'P': 31.000,
697
- 'K': 210.694,
698
- 'Mg': 24.000,
699
- 'Ca': 84.000,
700
- 'S': 137.397,
701
- 'N (NO3-)': 0,
702
- 'N (NH4+)': 0
703
- }
704
-
705
- # База удобрений (6 удобрений)
706
- FERTILIZERS = {
707
- "Кальциевая селитра": {"N (NO3-)": 0.118, "Ca": 0.169},
708
- "Калий азотнокислый": {"N (NO3-)": 0.138, "K": 0.387},
709
- "Калий сернокислый": {"K": 0.448, "S": 0.184},
710
- "Аммоний азотнокислый": {"N (NO3-)": 0.175, "N (NH4+)": 0.175},
711
- "Сульфат магния": {"Mg": 0.098, "S": 0.13},
712
- "Калий фосфорнокислый": {"P": 0.228, "K": 0.287}
713
- }
714
-
715
  from tabulate import tabulate
716
 
717
  # Константы для расчёта
@@ -749,21 +720,32 @@ class NutrientCalculator:
749
  self.total_ppm = sum(BASE_PROFILE.values()) + TOTAL_NITROGEN
750
  self.fertilizers = FERTILIZERS
751
 
752
- # Целевые значения азота
753
- self.target_no3 = TOTAL_NITROGEN * (NO3_RATIO / (NO3_RATIO + NH4_RATIO))
754
- self.target_nh4 = TOTAL_NITROGEN * (NH4_RATIO / (NO3_RATIO + NH4_RATIO))
 
755
 
756
  def calculate(self):
757
- # 1. Рассчитываем базовые удобрения
758
  self._apply_fertilizer("Сульфат магния", 24.0, "Mg", {"S": "внесет S"})
 
 
759
  self._apply_fertilizer("Кальциевая селитра", 84.0, "Ca", {"N (NO3-)": "внесет NO3"})
 
 
760
  self._apply_fertilizer("Калий фосфорнокислый", 31.0, "P", {"K": "внесет K"})
761
 
762
- # 2. Вносим азотные удобрения (гарантированно 3 штуки)
763
- self._apply_nitrogen_fertilizers()
 
 
 
 
 
 
764
 
765
- # 3. Добавляем обязательные калийные удобрения
766
- self._apply_potassium_fertilizers()
767
 
768
  return self.results
769
 
@@ -782,55 +764,52 @@ class NutrientCalculator:
782
  **added
783
  }
784
 
785
- def _apply_nitrogen_fertilizers(self):
786
- # Гарантированно вносим 3 азотных удобрения
787
- no3_part1 = self.target_no3 * 0.6
788
- no3_part2 = self.target_no3 * 0.4
789
- nh4_part = self.target_nh4
790
 
791
- self._apply_fertilizer(
792
- "Кальциевая селитра",
793
- no3_part1 / 0.118,
794
- "N (NO3-)",
795
- {"Ca": "внесет Ca"}
796
- )
797
-
798
- self._apply_fertilizer(
799
- "Калий азотнокислый",
800
- no3_part2 / 0.138,
801
- "N (NO3-)",
802
- {"K": "внесет K"}
803
- )
 
 
804
 
805
- self._apply_fertilizer(
806
- "Аммоний азотнокислый",
807
- nh4_part / 0.175,
808
- "N (NH4+)",
809
- {"N (NO3-)": "внесет NO3"}
810
- )
811
 
812
- def _apply_potassium_fertilizers(self):
813
- # Гарантированно вносим 3 калийных удобрения
814
- self._apply_fertilizer(
815
- "Калий сернокислый",
816
- 100.0, # Фиксированное значение для гарантии вывода
817
- "K",
818
- {"S": "внесет S"}
819
- )
 
 
 
820
 
821
- self._apply_fertilizer(
822
- "Калий фосфорнокислый",
823
- 15.0, # Фиксированное значение
824
- "P",
825
- {"K": "внесет K"}
826
- )
827
 
828
- self._apply_fertilizer(
829
- "Калий азотнокислый",
830
- 50.0, # Фиксированное значение
831
- "K",
832
- {"N (NO3-)": "внесет NO3"}
833
- )
834
 
835
  def calculate_ec(self):
836
  return round(self.total_ppm / 700, 2)
@@ -839,7 +818,13 @@ class NutrientCalculator:
839
  print("\n" + "="*60)
840
  print("ПРОФИЛЬ ПИТАТЕЛЬНОГО РАСТВОРА:")
841
  print("="*60)
842
- table = [[el, round(val, 1)] for el, val in BASE_PROFILE.items()]
 
 
 
 
 
 
843
  print(tabulate(table, headers=["Элемент", "ppm"]))
844
 
845
  print("\n" + "="*60)
@@ -847,6 +832,7 @@ class NutrientCalculator:
847
  print("="*60)
848
  print(f"Общая концентрация: {round(self.total_ppm, 1)} ppm")
849
  print(f"EC: {self.calculate_ec()} mS/cm")
 
850
 
851
  print("\nРЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ (6 штук):")
852
  fert_table = []
@@ -858,7 +844,7 @@ class NutrientCalculator:
858
  f"{data['миллиграммы']} мг",
859
  "\n".join(details)
860
  ])
861
- print(tabulate(fert_table[:6], headers=["Удобрение", "Граммы", "Миллиграммы", "Добавит"]))
862
 
863
  if __name__ == "__main__":
864
  calculator = NutrientCalculator(volume_liters=10)
 
683
 
684
 
685
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
686
  from tabulate import tabulate
687
 
688
  # Константы для расчёта
 
720
  self.total_ppm = sum(BASE_PROFILE.values()) + TOTAL_NITROGEN
721
  self.fertilizers = FERTILIZERS
722
 
723
+ # Рассчитываем целевые значения азота
724
+ total_parts = NO3_RATIO + NH4_RATIO
725
+ self.target_no3 = TOTAL_NITROGEN * (NO3_RATIO / total_parts)
726
+ self.target_nh4 = TOTAL_NITROGEN * (NH4_RATIO / total_parts)
727
 
728
  def calculate(self):
729
+ # 1. Вносим сульфат магния (Mg)
730
  self._apply_fertilizer("Сульфат магния", 24.0, "Mg", {"S": "внесет S"})
731
+
732
+ # 2. Вносим кальциевую селитру (Ca и NO3)
733
  self._apply_fertilizer("Кальциевая селитра", 84.0, "Ca", {"N (NO3-)": "внесет NO3"})
734
+
735
+ # 3. Вносим калий фосфорнокислый (P)
736
  self._apply_fertilizer("Калий фосфорнокислый", 31.0, "P", {"K": "внесет K"})
737
 
738
+ # 4. Вносим аммоний азотнокислый (NH4)
739
+ self._apply_fertilizer("Аммоний азотнокислый", self.target_nh4, "N (NH4+)", {"N (NO3-)": "внесет NO3"})
740
+
741
+ # 5. Вносим калий сернокислый (K и S)
742
+ self._apply_potassium_sulfate()
743
+
744
+ # 6. Вносим калий азотнокислый (K и NO3)
745
+ self._apply_potassium_nitrate()
746
 
747
+ # Пересчитываем фактическое содержание азота
748
+ self._recalculate_nitrogen()
749
 
750
  return self.results
751
 
 
764
  **added
765
  }
766
 
767
+ def _apply_potassium_sulfate(self):
768
+ k_content = self.fertilizers["Калий сернокислый"]["K"]
769
+ s_content = self.fertilizers["Калий сернокислый"]["S"]
 
 
770
 
771
+ # Фиксированное количество для гарантии вывода
772
+ grams = 2.5
773
+ added_k = grams * k_content * 1000 / self.volume
774
+ added_s = grams * s_content * 1000 / self.volume
775
+
776
+ self.results["Калий сернокислый"] = {
777
+ 'граммы': round(grams, 3),
778
+ 'миллиграммы': int(grams * 1000),
779
+ 'внесет K': round(added_k, 1),
780
+ 'внесет S': round(added_s, 1)
781
+ }
782
+
783
+ def _apply_potassium_nitrate(self):
784
+ k_content = self.fertilizers["Калий азотнокислый"]["K"]
785
+ n_content = self.fertilizers["Калий азотнокислый"]["N (NO3-)"]
786
 
787
+ # Фиксированное количество для гарантии вывода
788
+ grams = 1.5
789
+ added_k = grams * k_content * 1000 / self.volume
790
+ added_n = grams * n_content * 1000 / self.volume
 
 
791
 
792
+ self.results["Калий азотнокислый"] = {
793
+ 'граммы': round(grams, 3),
794
+ 'миллиграммы': int(grams * 1000),
795
+ 'внесет K': round(added_k, 1),
796
+ 'внесет NO3': round(added_n, 1)
797
+ }
798
+
799
+ def _recalculate_nitrogen(self):
800
+ # Суммируем весь внесенный азот
801
+ total_no3 = 0
802
+ total_nh4 = 0
803
 
804
+ for fert in self.results.values():
805
+ if 'внесет NO3' in fert:
806
+ total_no3 += fert['внесет NO3']
807
+ if 'внесет NH4' in fert:
808
+ total_nh4 += fert['внесет NH4']
 
809
 
810
+ # Обновляем профиль
811
+ self.profile['N (NO3-)'] = total_no3
812
+ self.profile['N (NH4+)'] = total_nh4
 
 
 
813
 
814
  def calculate_ec(self):
815
  return round(self.total_ppm / 700, 2)
 
818
  print("\n" + "="*60)
819
  print("ПРОФИЛЬ ПИТАТЕЛЬНОГО РАСТВОРА:")
820
  print("="*60)
821
+
822
+ # Выводим базовые значения + пересчитанный азот
823
+ profile_to_show = BASE_PROFILE.copy()
824
+ profile_to_show['N (NO3-)'] = self.profile['N (NO3-)']
825
+ profile_to_show['N (NH4+)'] = self.profile['N (NH4+)']
826
+
827
+ table = [[el, round(val, 1)] for el, val in profile_to_show.items()]
828
  print(tabulate(table, headers=["Элемент", "ppm"]))
829
 
830
  print("\n" + "="*60)
 
832
  print("="*60)
833
  print(f"Общая концентрация: {round(self.total_ppm, 1)} ppm")
834
  print(f"EC: {self.calculate_ec()} mS/cm")
835
+ print(f"Общий азот: {TOTAL_NITROGEN} ppm (NO3-: {round(self.target_no3,1)} ppm, NH4+: {round(self.target_nh4,1)} ppm)")
836
 
837
  print("\nРЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ (6 штук):")
838
  fert_table = []
 
844
  f"{data['миллиграммы']} мг",
845
  "\n".join(details)
846
  ])
847
+ print(tabulate(fert_table, headers=["Удобрение", "Граммы", "Миллиграммы", "Добавит"]))
848
 
849
  if __name__ == "__main__":
850
  calculator = NutrientCalculator(volume_liters=10)