Resolved: Section 6 Q5 Python programmer bootcamp
Ask the user to input a sequence of numbers. Then calculate the mean
and print the result.
Here is the solution.
user_input = input('Please enter a number type exit to stop:> ')
numbers = []
while user_input.lower() != 'exit':
while not user_input.isdigit():
print('That is not a number! Numbers only please:> ')
user_input = input('Try again:> ')
numbers.append(int(user_input))
user_input = input('Please enter next number:> ')
total = 0
for number in numbers:
total += number
print(f'Mean is {total/len(numbers)}')
print(sum(numbers)/len(numbers))
Now, my goal is to attempt the question using the following logic and with slight modification to the above code.
- collect the numbers from the user
- store them one by one in a NumPy
- append them one by one in a NumPy array.
- use the np.ndarray.mean to get the mean
modification to above solution
import numpy as np
user_nums = np.array([])
user_input = input('Please enter a number type exit to stop:> ')
while user_input.lower() != 'exit':
while not user_input.isdigit():
print('That is not a number! Numbers only please:> ')
user_input = input('Try again:> ')
np.append(user_nums,float(user_input)) # append user input to user_nums
mean = user_nums.mean()
print("mean is ",mean)
After inputting the first number, the program takes forever to
continue running leaving me no choice but to force-close the program.
Can you identify my mistakes? Thanks for your kind assistance in
advance.
Hey Carlton,
Thank you for your question!
I have commented your code below:

What you need to do in order to avoid entering an infinite loop is to add a line of code asking the user for another number, like so:

This time, however, we hit another issue - the mean is
nan
. This suggests that there is nothing stored in the user_nums
variable. You can convince yourself that if you add a line of code that prints the array every time a number should be appended:
In the documentation of the
append()
method, you will find that the method appends the value to a copy of the original array. Therefore, the method creates a copy, stores the value 1.0 there, and leaves the original array unmodified. To populate the original array, you would need to modify the code as follows:
Now that works as expected! :) One should always be extra carful with while-loops.
Hope this helps! Keep up the good work!
Kind regards,
365 Hristina
@Hristina. Phenomenally well explained.
Lessons learned from your correction
np. append() does not change the original array. (This is also a reminder for me to use py docs regularly)
extra care must be given when working with while loops i.e ensure that the failure condition of the loop is met.