Stack Overflow Asked by nsmedira on December 18, 2020
Working on an exercise from MIT’s OpenCourseWare 6.01SC. Problem 3.1.5:
Define a function
clip(lo, x, hi)
that returnslo
ifx
is less thanlo
, returnshi
ifx
is greater thanhi
, and returnsx
otherwise. You can assume thatlo < hi
. …don’t useif
, but usemin
andmax
.
Reformulated in English, if x
is the least of the arguments, return lo
; if x
is the greatest of the arguments, return hi
; otherwise, return x
. Thus:
def clip(lo, x, hi):
if min(lo, x, hi) == x:
return lo
elif max(lo, x, hi) == x:
return hi
else:
return x
Maybe I am not understanding the problem correctly, but I can’t figure out how to return a result without using if
at all. How can the function be modified to remove the if/elif/else statements?
Link to original problem 3.1.5
Link to previous problem 3.1.4 (for context)
EDIT:
Comments/answers to this question helped me realize that my original plain English reformulation wasn’t a great way to think about the problem. A better way to think about it would have been to determine which of the arguments is between the other two.
One line of code:
#! python3.8
def clip(lo, x, hi):
return max(min(x, hi), lo)
print(clip(1, 2, 3))
print(clip(2, 1, 3))
print(clip(1, 3, 2))
# Output
# 2
# 2
# 2
Correct answer by Paul Cornelius on December 18, 2020
Here you go, a value checking function without using if-else at all. While block will only run for once so there is no redundancy.
def clip(lo, x, hi):
low = (min(lo, x) == x)
high = (max(x, hi) == x)
while low:
return lo
while high:
return hi
return x
EDIT: I don't know why he downvoted my code
Answered by Ateeq ur Rehman on December 18, 2020
You can return this formula:
x + lo + hi - max(x, lo, hi) - min(x, lo, hi)
Arguing by cases:
Case 1:
If min(lo, x, hi) = lo and max(lo, x, hi) = hi
x + lo + hi - max(x, lo, hi) - min(x, lo, hi) ==> x + lo + hi - hi - lo ==> x
Case 2:
If min(lo, x, hi) = lo and max(lo, x, hi) = x
x + lo + hi - max(x, lo, hi) - min(x, lo, hi) ==> x + lo + hi - x - lo ==> hi
Case 3:
If min(lo, x, hi) = x and max(lo, x, hi) = hi
x + lo + hi - max(x, lo, hi) - min(x, lo, hi) ==> x + lo + hi - hi - x ==> lo
The formula returns the expected answer on all possible cases.
Answered by MrGeek on December 18, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP