Reputation: 51
My task is to make a Program that finds the median, mode and mean of a user defined number set. I believe that part is done, however it is also suppose to return a "0" if the list is empty. The way i am deriving my number list is through
enterNumbers = list(map(int,input("Enter Numbers : ").strip().split(' ')))[:]
This returns ValueError: invalid literal for int() with base 10: ''
Obviously this will only accept integers as an argument but I don't know where to begin to remedy this.
Full code as follows:
#Define median , Mode and Mean
def median(enterNumbers):
enterNumbers.sort()
middle = len(enterNumbers) // 2
if len(enterNumbers) % 2 == 1:
return enterNumbers[middle]
else:
return enterNumbers[middle] + enterNumbers[middle - 1] / 2
def mode(enterNumbers):
numberDictionary = {}
for digit in enterNumbers:
number = numberDictionary.get(digit, None)
if number == None:
numberDictionary[digit] = 1
else:
numberDictionary[digit] = number + 1
maxValue = max(numberDictionary.values())
modeList = []
for key in numberDictionary:
if numberDictionary[key] == maxValue:
modeList.append(key)
return modeList
def mean(enterNumbers):
mean = 0
for num in enterNumbers:
mean += num
return mean / len(enterNumbers)
#Define Main Function
def main():
enterNumbers = list(map(int,input("Enter Numbers : ").strip().split(' ')))[:]
enterNumbers.sort()
print("\n"," Number List ","\n---------------------","\n",enterNumbers)
print("\n","median, mode mean?","\n---------------------")
answer = input()
if answer == "median":
answer = median
elif answer == "mode":
answer = mode
elif answer == "mean":
answer = mean
print(answer(enterNumbers))
main()
Upvotes: 1
Views: 1065
Reputation: 71454
I'd handle this by having your list default to [0]
if there's no valid input. That will produce the desired result of 0
from all of the averaging functions.
from statistics import mean, median, mode
def main():
try:
numbers = [int(n) for n in input("Enter Numbers: ").split()]
except ValueError:
numbers = [0]
func = {
"mean": mean,
"median": median,
"mode": mode,
}
print(f"Number list: {numbers}")
print(func[input("median, mode, mean? ")](numbers))
if __name__ == '__main__':
main()
I've used the statistics
module for brevity, but it should work exactly the same with your hand-rolled implementations.
Upvotes: 0
Reputation: 138
This will work with you :
def main():
try:
enterNumbers = list(map(int, input("Enter Numbers : ").strip().split(' ')))[:]
enterNumbers.sort()
print("\n", " Number List ", "\n---------------------", "\n", enterNumbers)
print("\n", "median, mode mean?", "\n---------------------")
answer = input()
except:
print('Please Enter a number')
main()
if answer == "median":
answer = median
elif answer == "mode":
answer = mode
elif answer == "mean":
answer = mean
print(answer(enterNumbers))
Upvotes: 0
Reputation: 21
You can just use a 'Try Except' in this part of your code. Will treat errors in general, even if the user types a String.
def main():
try:
enterNumbers = list(map(int, input("Enter Numbers : ").strip().split(' ')))[:]
enterNumbers.sort()
print("\n", " Number List ", "\n---------------------", "\n", enterNumbers)
print("\n", "median, mode mean?", "\n---------------------")
answer = input()
if answer == "median":
answer = median
elif answer == "mode":
answer = mode
elif answer == "mean":
answer = mean
print(answer(enterNumbers))
except:
print(0)
Upvotes: 1
Reputation: 587
I would highly recommend to refactor your code. But that would fix your error.
enterNumbers = list(map(int, (input("Enter Numbers : ") or "0").strip().split(' ')))[:]
Upvotes: 1