Задача 6.32. Зелинский Кирилл.py 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import tkinter as tk
  2. from tkinter import ttk
  3. from tkinter import filedialog
  4. def calculate_skiing():
  5. """
  6. Вычисляет день, когда лыжник пробежит больше 20 км, и день, когда суммарный пробег превысит 100 км.
  7. """
  8. try:
  9. initial_distance = float(initial_distance_entry.get())
  10. increase_percentage = float(increase_percentage_entry.get())
  11. if initial_distance <= 0:
  12. result_text.delete("1.0", tk.END)
  13. result_text.insert(tk.END, "Начальное расстояние должно быть больше 0.")
  14. return
  15. if increase_percentage <= 0:
  16. result_text.delete("1.0", tk.END)
  17. result_text.insert(tk.END, "Процент увеличения должен быть больше 0.")
  18. return
  19. distance = initial_distance
  20. total_distance = initial_distance
  21. day = 1
  22. day_over_20 = None
  23. day_over_100 = None
  24. while True:
  25. if distance > 20 and day_over_20 is None:
  26. day_over_20 = day
  27. if total_distance > 100 and day_over_100 is None:
  28. day_over_100 = day
  29. if day_over_20 is not None and day_over_100 is not None:
  30. break
  31. day += 1
  32. distance *= (1 + increase_percentage / 100)
  33. total_distance += distance
  34. if day > 1000:
  35. break
  36. result = ""
  37. if day_over_20 is not None:
  38. result += f"В день {day_over_20} лыжник пробежит больше 20 км.\n"
  39. else:
  40. result += "Лыжник никогда не пробежит больше 20 км.\n"
  41. if day_over_100 is not None:
  42. result += f"Суммарный пробег превысит 100 км в день {day_over_100}.\n"
  43. else:
  44. result += "Суммарный пробег никогда не превысит 100 км.\n"
  45. result_text.delete("1.0", tk.END)
  46. result_text.insert(tk.END, result)
  47. filepath = filedialog.asksaveasfilename(defaultextension=".txt",
  48. filetypes=[("Текстовые файлы", "*.txt"),
  49. ("Все файлы", "*.*")])
  50. if filepath:
  51. try:
  52. with open(filepath, "w") as f:
  53. f.write(result)
  54. result_text.insert(tk.END, f"\nРезультат сохранен в файл: {filepath}")
  55. except Exception as e:
  56. result_text.insert(tk.END, f"\nОшибка при сохранении в файл: {e}")
  57. except ValueError:
  58. result_text.delete("1.0", tk.END)
  59. result_text.insert(tk.END, "Введите корректные числа.")
  60. root = tk.Tk()
  61. root.title("Расчет пробега лыжника")
  62. initial_distance_label = ttk.Label(root, text="Начальный пробег (км):")
  63. initial_distance_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
  64. initial_distance_entry = ttk.Entry(root)
  65. initial_distance_entry.grid(row=0, column=1, padx=5, pady=5, sticky=tk.E)
  66. initial_distance_entry.insert(0, "10")
  67. increase_percentage_label = ttk.Label(root, text="Процент увеличения пробега:")
  68. increase_percentage_label.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
  69. increase_percentage_entry = ttk.Entry(root)
  70. increase_percentage_entry.grid(row=1, column=1, padx=5, pady=5, sticky=tk.E)
  71. increase_percentage_entry.insert(0, "10")
  72. calculate_button = ttk.Button(root, text="Рассчитать", command=calculate_skiing)
  73. calculate_button.grid(row=2, column=0, columnspan=2, padx=5, pady=5)
  74. result_text = tk.Text(root, height=10, width=50)
  75. result_text.grid(row=3, column=0, columnspan=2, padx=5, pady=5)
  76. root.mainloop()