как найти min max из трех переменных, используя только логические и числовые сравнения и функцию abs

#python #math

#python #математика

Вопрос:

я получил задание, которое должно определить, какое из них является самым высоким, самым низким или средним

предположим, что значение трех переменных x, y, z будет задано случайным образом, и мы не знаем значения.

и мы не можем использовать min(), max ()

можно использовать только числовые сравнения, логические и abs функции

я трачу так много времени, пытаясь разобраться, но все еще застрял.

это пример одного из моего кода, но это не работает, когда y — наибольшее число из-за этой строки

«range_between_middle_max = abs(max_yx — max_zx) abs(max_zx — max_zy)»

 x = 23
y = 14
z = 123

range_yx = abs(x - y)
middle_yx = (x   y) / 2
max_yx = middle_yx   (range_yx / 2)


range_zx = abs(x - z)
middle_zx = (x   z) / 2
max_zx = middle_zx   (range_zx / 2)


range_zy = abs(z - y)
middle_zy = (z   y) / 2
max_zy = middle_zy   (range_zy / 2)



range_between_middle_max = abs(max_yx - max_zx)   abs(max_zx - max_zy)
middle = abs(abs(max_yx - max_zx) - max_zy)
highest = middle   range_between_middle_max
lowest = (x y z) - (middle   highest)

print(highest)
print(middle)
print(lowest)
  

Комментарии:

1. Как бы вы это сделали, используя ручку и бумагу?

Ответ №1:

Мы можем обрабатывать результаты сравнения как числа, чтобы избежать использования if-else:

 xBz = x >= z
yBz = y >= z
xBy = x >= y
zBy = z > y
yBx = y > x
zBx = z > x
max = xBz * xBy * x   yBz * yBx * y   zBy * zBx * z
min = zBx * yBx * x   zBy * xBy * y   yBz * xBz * z