DmitrMakeev commited on
Commit
d623950
·
verified ·
1 Parent(s): 71a8fed

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -35
app.py CHANGED
@@ -681,11 +681,13 @@ def view_image():
681
 
682
 
683
 
684
- # Общий азот и соотношение NO3:NH4
 
 
685
  TOTAL_NITROGEN = 220 # ppm
686
- N_RATIO = (10, 5) # Пример: 10:1 (NO3:NH4)
 
687
 
688
- # Профиль питательного раствора для томатов (ppm)
689
  TOMATO_PROFILE = {
690
  'P': 50,
691
  'K': 350,
@@ -694,7 +696,6 @@ TOMATO_PROFILE = {
694
  'S': 100
695
  }
696
 
697
- # База данных удобрений
698
  fertilizers_db = {
699
  "Кальциевая селитра": {
700
  "N (NO3-)": 0.118,
@@ -732,24 +733,21 @@ class NutrientCalculator:
732
  self.initial_n_profile = {}
733
 
734
  def calculate(self, base_profile, total_n, n_ratio):
735
- # Расчёт NO3 и NH4 на основе общего азота и соотношения
736
  total_parts = n_ratio[0] + n_ratio[1]
737
  no3 = total_n * (n_ratio[0] / total_parts)
738
  nh4 = total_n * (n_ratio[1] / total_parts)
739
 
740
- # Сохраняем рассчитанные значения азота
741
  self.initial_n_profile = {
742
  'N (NO3-)': round(no3, 1),
743
  'N (NH4+)': round(nh4, 1)
744
  }
745
 
746
- # Формирование полного профиля
747
  self.final_profile = base_profile.copy()
748
  self.final_profile['N (NO3-)'] = no3
749
  self.final_profile['N (NH4+)'] = nh4
750
  self.total_ppm = total_n + sum(base_profile.values())
751
 
752
- # Последовательное внесение удобрений
753
  self._apply_magnesium_sulfate()
754
  self._apply_calcium_nitrate()
755
  self._apply_mkp()
@@ -844,36 +842,33 @@ class NutrientCalculator:
844
  return round(self.total_ppm / 700, 2)
845
 
846
  def print_report(self):
847
- print("\n" + "="*50)
848
- print("ЗАДАННЫЙ ПРОФИЛЬ ПИТАТЕЛЬНОГО РАСТВОРА (ppm):")
849
- print("="*50)
850
- profile_table = []
851
- for element, value in self.final_profile.items():
852
- profile_table.append([element, round(value, 1)])
853
- print(tabulate(profile_table, headers=["Элемент", "Концентрация (ppm)"]))
854
-
855
- print("\nИсходный расчёт азота по TOTAL_NITROGEN и соотношению NO3:NH4")
856
- for n_type, value in self.initial_n_profile.items():
857
- print(f" {n_type}: {value} ppm")
858
-
859
- ec = self.calculate_ec()
860
- print("\n" + "="*50)
861
  print(f"РАСЧЕТ ДЛЯ {self.volume} ЛИТРОВ РАСТВОРА")
862
- print("="*50)
863
- print(f"\nОБЩАЯ КОНЦЕНТРАЦИЯ: {self.total_ppm} ppm")
864
- print(f"ЭЛЕКТРОПРОВОДИМОСТЬ (EC): {ec} mS/cm (при 25°C)")
865
 
866
  print("\nРЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ:")
867
- table = []
868
  for fert, data in self.results.items():
869
- additions = [f"+{k}: {v} ppm" for k, v in data.items() if k.startswith('внесет')]
870
- table.append([
871
  fert,
872
- f"{data['граммы']:.3f} г",
873
  f"{data['миллиграммы']} мг",
874
- "\n".join(additions)
875
  ])
876
- print(tabulate(table, headers=["Удобрение", "Граммы", "Миллиграммы", "Добавит"]))
877
 
878
  print("\nОСТАТОЧНЫЙ ДЕФИЦИТ:")
879
  deficit = {k: v for k, v in self.final_profile.items() if v > 0.1}
@@ -881,13 +876,13 @@ class NutrientCalculator:
881
  for el, val in deficit.items():
882
  print(f" {el}: {round(val, 1)} ppm")
883
  else:
884
- print(" Все элементы полностью покрыты")
885
 
886
 
887
- # Пример использования
888
  if __name__ == "__main__":
889
- calc = NutrientCalculator(volume_liters=10)
890
- results = calc.calculate(TOMATO_PROFILE.copy(), total_n=TOTAL_NITROGEN, n_ratio=N_RATIO)
891
  calc.print_report()
892
 
893
 
@@ -898,5 +893,6 @@ if __name__ == "__main__":
898
 
899
 
900
 
 
901
  if __name__ == '__main__':
902
  app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))
 
681
 
682
 
683
 
684
+ from tabulate import tabulate
685
+
686
+ # Заданные значения
687
  TOTAL_NITROGEN = 220 # ppm
688
+ N_RATIO = (10, 5) # Пример: NO3:NH4 = 10:5
689
+ VOLUME_LITERS = 10 # Объём раствора
690
 
 
691
  TOMATO_PROFILE = {
692
  'P': 50,
693
  'K': 350,
 
696
  'S': 100
697
  }
698
 
 
699
  fertilizers_db = {
700
  "Кальциевая селитра": {
701
  "N (NO3-)": 0.118,
 
733
  self.initial_n_profile = {}
734
 
735
  def calculate(self, base_profile, total_n, n_ratio):
 
736
  total_parts = n_ratio[0] + n_ratio[1]
737
  no3 = total_n * (n_ratio[0] / total_parts)
738
  nh4 = total_n * (n_ratio[1] / total_parts)
739
 
 
740
  self.initial_n_profile = {
741
  'N (NO3-)': round(no3, 1),
742
  'N (NH4+)': round(nh4, 1)
743
  }
744
 
 
745
  self.final_profile = base_profile.copy()
746
  self.final_profile['N (NO3-)'] = no3
747
  self.final_profile['N (NH4+)'] = nh4
748
  self.total_ppm = total_n + sum(base_profile.values())
749
 
750
+ # Расчёт удобрений
751
  self._apply_magnesium_sulfate()
752
  self._apply_calcium_nitrate()
753
  self._apply_mkp()
 
842
  return round(self.total_ppm / 700, 2)
843
 
844
  def print_report(self):
845
+ print("\n" + "="*60)
846
+ print("ПРОФИЛЬ ПИТАТЕЛЬНОГО РАСТВОРА (ИТОГО):")
847
+ print("="*60)
848
+ table = [[el, round(val, 1)] for el, val in self.final_profile.items()]
849
+ print(tabulate(table, headers=["Элемент", "Остаток ppm"]))
850
+
851
+ print("\nИсходный расчёт азота:")
852
+ for form, value in self.initial_n_profile.items():
853
+ print(f" {form}: {value} ppm")
854
+
855
+ print("\n" + "="*60)
 
 
 
856
  print(f"РАСЧЕТ ДЛЯ {self.volume} ЛИТРОВ РАСТВОРА")
857
+ print("="*60)
858
+ print(f"Общая концентрация: {self.total_ppm} ppm")
859
+ print(f"EC: {self.calculate_ec()} mS/cm")
860
 
861
  print("\nРЕКОМЕНДУЕМЫЕ УДОБРЕНИЯ:")
862
+ fert_table = []
863
  for fert, data in self.results.items():
864
+ details = [f"+{k}: {v} ppm" for k, v in data.items() if k.startswith('внесет')]
865
+ fert_table.append([
866
  fert,
867
+ f"{data['граммы']} г",
868
  f"{data['миллиграммы']} мг",
869
+ "\n".join(details)
870
  ])
871
+ print(tabulate(fert_table, headers=["Удобрение", "Граммы", "Миллиграммы", "Добавит"]))
872
 
873
  print("\nОСТАТОЧНЫЙ ДЕФИЦИТ:")
874
  deficit = {k: v for k, v in self.final_profile.items() if v > 0.1}
 
876
  for el, val in deficit.items():
877
  print(f" {el}: {round(val, 1)} ppm")
878
  else:
879
+ print(" Все элементы покрыты полностью")
880
 
881
 
882
+ # Запуск
883
  if __name__ == "__main__":
884
+ calc = NutrientCalculator(volume_liters=VOLUME_LITERS)
885
+ calc.calculate(TOMATO_PROFILE.copy(), TOTAL_NITROGEN, N_RATIO)
886
  calc.print_report()
887
 
888
 
 
893
 
894
 
895
 
896
+
897
  if __name__ == '__main__':
898
  app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))