Anther Eros
Anther Eros

Reputation: 51

Returning "0" if given an empty list

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

Answers (4)

Samwise
Samwise

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

Mr Dream
Mr Dream

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

Jolitos
Jolitos

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

Gesuchter
Gesuchter

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

Related Questions