Python

Помогите решить задачу в питоне, пожалуйста.

Задача 8. Яйца
В рамках программы колонизации Марса компания «Спейс Инжиниринг» вывела особую породу черепах, которые, по задумке, должны размножаться, откладывая яйца в марсианском грунте. Откладывать яйца слишком близко к поверхности опасно из-за радиации, а слишком глубоко — из-за давления грунта и недостатка кислорода. Вообще, факторов очень много, но специалисты проделали большую работу и предположили, что уровень опасности для черепашьих яиц рассчитывается по формуле D = x^3 − 3x^2 − 12x + 10, где x — глубина кладки в метрах, а D — уровень опасности в условных единицах. Для тестирования гипотезы нужно взять пробу грунта на безопасной, согласно формуле, глубине.
Напишите программу, находящую такое значение глубины х, при котором уровень опасности как можно более близок к нулю. На вход программе подаётся максимально допустимое отклонение уровня опасности от нуля, а программа должна рассчитать приблизительное значение х, удовлетворяющее этому отклонению. Известно, что глубина точно больше нуля и меньше четырёх метров. Обеспечьте контроль ввода.

Пример:
Введите максимально допустимый уровень опасности: 0.01
Приблизительная глубина безопасной кладки: 0.732421875 м
Для будущих поколений питонистов

 def formula(x):  
return x ** 3 - 3 * x ** 2 - 12 * x + 10

# поиск глубины при помощи половинного деления
def calculate_safe_depth(danger_lvl):
min_depth = 0
max_depth = 4
result = (min_depth + max_depth) / 2

# поиск до тех пор пока не удовлетворит заданной точности
while abs(formula(result)) >= danger_lvl:
# какой из сторон точнее, т.е. ближе к 0
if abs(formula(min_depth)) < abs(formula(max_depth)):
max_depth = result
else:
min_depth = result

result = (min_depth + max_depth) / 2
return result


def main_function():
accept_danger_lvl = float(input('Введите максимально допустимый уровень опасности: '))
result = calculate_safe_depth(accept_danger_lvl)
print('Приблизительная глубина безопасной кладки: ', result, 'm')



main_function()
Максим Гарин
Максим Гарин
340
Лучший ответ
Дмитрий Магадеев Глубже 2 метров закопать не позволяет.
Тимофей Андрианов Будь благословенен ^^^
def f(x): return x ** 3 - 3 * x ** 2 - 12 * x + 10
x, e = [0.0, 4.0], float(input('Введите максимально допустимый уровень опасности: '))
while x[1] - x[0] >= e:
~~t = sum(x) / 2
~~x[f(x[0]) * f(t) < 0] = t
print('Приблизительная глубина безопасной кладки:', sum(x) / 2, 'м')
Дмитрий Бурдинский Большое вам спасибо, всё работает. Я извиняюсь за такую наглость можно, пожалуйста, код без использования списков и методов работы со строками
Green Happi А без ' f ' можно это решить?
Green Happi Понял, спасибо большое, я просто не прошел еще эту часть)
Марат Уторбаев Благодарю Вас, Андрей. Коротко и ясно. И без удаления гланд через задний проход)
depth_min = 0
depth_max = 4
depth = 2
denger_max = float(input('Введите максимальный уровень опасности: '))

denger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10

#('Глубина ', depth, 'Опасность ', denger)



if denger_max <= 0:
print('Ошибка. Максимально допустимый уровень опасности должен быть больше нуля.')
else:
while abs(denger) > denger_max:
if denger > 0:
depth_min = depth
else:
depth_max = depth
depth = depth_min + (depth_max - depth_min) / 2
denger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10

print('Приблизительная глубина безопасной кладки: ', depth,'m')
Исправленный ответ.
d_from = 0
d_to = 4
max_danger = float(input('Введите максимально допустимый уровень опасности: '))

depth = d_from + (d_to - d_from) / 2
danger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10

if max_danger < 0:
print('Ошибка: максимально допустимый уровень опасности - абсолютная величина и должна быть больше нуля.')
else:
print('Depth:', depth, 'Danger:', danger)
while abs(danger) > max_danger:
if danger > 0:
d_from = depth
else:
d_to = depth
depth = d_from + (d_to - d_from) / 2
danger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
print('Depth:', depth, 'Danger:', danger)

print('Приблизительная глубина безопасной кладки:', depth,'м')
Михаил Сафронов извиняюсь, а исходя из чего вы вывели 'depth' на пятой строчке
def hazard_calculation(variable):
danger_level = variable ** 3 - 3 * variable ** 2 - 12 * variable + 10
return danger_level

danger = float(input('Введите максимальнй уровень опасности: '))
depth_min = 0
depth_max = 4

middle_depth = (depth_min + depth_max) / 2
danger_middle = hazard_calculation(middle_depth)

while abs(danger_middle) > danger:
if danger_middle < 0:
depth_max = middle_depth
else:
depth_min = middle_depth
middle_depth = (depth_min + depth_max) / 2
danger_middle = hazard_calculation(middle_depth)

print('Максимальный уровень глубины безопасной кладки:', middle_depth)
max_danger = float(input('Введите макс. допустимый уровень опасности: '))

d_from = 0
d_to = 4
depth = d_from + (d_to - d_from) / 2
danger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10

if max_danger < 0:
print('Ошибка. допустимо только больше 0')
else:
print('Depth:', depth, 'Danger:', danger)
while abs(danger) > max_danger:
if danger > 0:
d_from = depth
else:
d_to = depth
depth = d_from + (d_to - d_from) / 2
danger = depth ** 3 - 3 * depth ** 2 - 12 * depth + 10
print('Depth:', depth, 'Danger:', danger)
print('Приблизительная глубина безопасной кладки: ', depth, 'm')