Here are the instructions:
Write a function called clipnums with three parameters – a list of numbers, a upper limit number, and a lower limit number. The function should return a new list where numbers lower than lower limit are replaced by the lower limit number and numbers higher than the upper limit number are replaced by the upper limit number.
This is an intorductory course for Python so I'm just learning and am working with the basics. :)
Below is my code
def clipnums(nums, u_limit, d_limit):
newnums = []
for i in nums:
if i < d_limit:
newnums.append(d_limit)
elif i > u_limit:
newnums.append(u_limit)
else:
newnums.append(i)
return newnums
With the input
nums = [-1, 3, 0, 6, 8, 11, 20]
d_limit = 2
u_limit = 10
my code should return
[2, 3, 2, 6, 8, 10, 10]
However, it returns
[10, 10, 10, 10, 10, 2, 2]
Can anyone tell me why? Thanks!
An easy solution could be to just use min max. This makes it a bit easier.
nums = [-1, 3, 0, 6, 8, 11, 20]
d_limit = 2
u_limit = 10
clipped_nums = [max(min(num, u_limit), d_limit) for num in nums]
To answer your question of why it doesn't work: didn't u just switch the d_limit
and u_limit
when calling your function?
>>> clipnums(nums, u_limit, d_limit)
[2, 3, 2, 6, 8, 10, 10]
>>> clipnums(nums, d_limit, u_limit)
[10, 10, 10, 10, 10, 2, 2]