FAQ: Code Challenge: Loops - Max Num


#1

This community-built FAQ covers the “Max Num” exercise from the lesson “Code Challenge: Loops”.

Paths and Courses
This exercise can be found in the following Codecademy content:

Computer Science

FAQs on the exercise Max Num

Join the Discussion. Help a fellow learner on their journey.

Ask or answer a question about this exercise by clicking reply (reply) below!

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources? Head here.

Looking for motivation to keep learning? Join our wider discussions.

Learn more about how to use this guide.

Found a bug? Report it!

Have a question about your account or billing? Reach out to our customer support team!

None of the above? Find out where to ask other questions here!


#2

Hi, why isn’t this a valid solution?

#Write your function here
def max_num(nums):
maximum = nums[0]
maximum = [num for num in nums if num > maximum]
maximum = maximum[0]
return maximum

#Uncomment the line below when your function is done
print(max_num([50, -10, 0, 75, 20]))


#3

maximum = [num for num in nums if num > maximum]

I assume this might be the reason, if your num is smaller than the value previously assign to maximum, then your maximum value won’t keep updating.
you can validate by insert a number < 50 in the first place of the list(before 50), or change 0 in the list to 60, and you’ll get a result 60 instead of 75 it should be.

[1, 50, -10, 0, 75, 20] ==> result 50
[49, 50, -10, 0, 75, 20] ==> result 50
[50, -10, 60, 75, 20] ==> result 60


#4

Ah ok I see where you’re coming from. Well in that case I passed the exercise by simply returning maximum[0], and shouldn’t have :sweat_smile:.


#5

I don’t get why they put this in the loops section because I passed it without doing a loop and my code is way simpler than what a loop would be:

#define max_num
def max_num(nums):
#sort nums list
nums.sort()
#return final variable/ largest number in nums list
return nums[-1]

Maybe I just cheated, but I felt like this answer would make more sense if this was an actual objective in the real world.


#6

At the very least, we should be able to take an unsorted list and parse out the minimum and maximum value using a simple algorithm, rather than built-in functions.

>>> from random import randint, shuffle
>>> u, v = randint(1, 1000), randint(1, 1000)
>>> if u > v:
	u, v = v, u

	
>>> y = list(range(u, v))
>>> shuffle(y)

Let’s pretend we don’t know the range that the list is created from and that this block of data was dropped in our lap.

>>> minimum, maximum = y[0], y[-1]
>>> for n in y:
	if n < minimum:
		minimum = n
	elif n > maximum:
		maximum = n

		
>>> minimum, maximum
(421, 921)
>>> 

#7

It’s a good observation that you can find min/max at the ends of a sorted list, however, the work carried out is more than is required.


#11

Hi Kell215,

I used almost the same solution as you did it, but using sorted… not sure if these answers are the correct but I believe is better than use a loop…

def max_num(nums):
#Sorting list
l1 = sorted(nums)
return l1[-1]


#12

Would sorting add to the workload, or take away from it?

>>> from random import randrange
>>> def maximize(a, b):
    return a > b and a or b

>>> sample = [randrange(1000000) for _ in range(1000000)]
>>> u = sample[0]
>>> for v in sample:
	u = maximize(u, v)

	
>>> u
999999
>>> 

As we would expect, the highest number may never be generated. In a subsequnet test we got,

>>> sample = [randrange(1000000) for _ in range(1000000)]
>>> u = sample[0]
>>> for v in sample:
	u = maximize(u, v)

	
>>> u
999997
>>>