Search code examples
pythonflowgorithm

Getting a 'float' error trying to sort input by age group


When checking my code copied from a program called flowgorithm using onlinegdb, I'm getting the "TypeError: 'float' object is not subscriptable".

I'm not sure what I'm doing wrong during the 'if' statement, but I get this feeling I'm close in my logic.

def readerAge():
    pass
    
    return readerAge

# Main
readerAge = [0] * (4)

print("Please enter reader's age: ")
readerAge = float(input())
if readerAge < 20:
    readerAge[0] = readerAge[0] + 1
else:
    if readerAge >= 20 and readerAge <= 29:
        readerAge[1] = readerAge[1] + 1
    else:
        if readerAge >= 30 and readerAge <= 39:
            readerAge[2] = readerAge[2] + 1
        else:
            if readerAge >= 40 and readerAge <= 49:
                readerAge[3] = readerAge[3] + 1
            else:
                if readerAge >= 50:
                    readerAge[4] = readerAge[4] + 1
print("Please enter reader's gender (M/F/NB): ")
readerGender = float(input())
print("Please enter the reader's marriage status (Single/Married/Divorced): ")
readerMarigStat = float(input())
print("Please enter reader's yearly income: ")
yearlyIncome = float(input())
print("Demographic analysis")
print("Number of readers under the age of 20: " + str(readerAge[0]))
print("Number of readers between 20-29: " + str(readerAge[1]))
print("Number of readers between 30-39: " + str(readerAge[2]))
print("Number of readers between 40-49: " + str(readerAge[3]))
print("Number of readers over the age of 50: " + str(readerAge[4]))

Solution

  • The problem lies here:

    readerAge = [0] * (4)
    
    print("Please enter reader's age: ")
    readerAge = float(input())
    if readerAge < 20:
        readerAge[0] = readerAge[0] + 1
    

    You create a list variable and then override it with a float variable. (and trying to access a float at a specified index does not make sense, hence the raised error)

    Use a separate variable for storing the input and keep readerAge (or vice-versa) as a list:

    readerAge = [0] * (4)
    
    print("Please enter reader's age: ")
    age = float(input())
    if age < 20:
        readerAge[0] = readerAge[0] + 1
    

    EDIT: I did not look at the end of your code and this is not directly related to the question but you're also converting string input to float and that will raise an error as well. Just use input() without float() if you expect to get actual words and not numbers entered.

    print("Please enter reader's gender (M/F/NB): ")
    readerGender = float(input())
    print("Please enter the reader's marriage status (Single/Married/Divorced): ")
    readerMarigStat = float(input())
    print("Please enter reader's yearly income: ")
    yearlyIncome = float(input())