Search code examples
pythontypeerrornonetype

Error in Python: TypeError: '<' not supported between instances of 'str' and 'NoneType'


So I have some code in Python that is supposed to take 3 integers and compare them to each other and then determine which of the three integers are the smallest and largest values. When I run the code, I keep getting the error of:

Traceback (most recent call last):
File "/root/sandbox/LargeSmall.py", line 41, in \<module\>
if small_num_three \< small_num_two:
TypeError: '\<' not supported between instances of 'str' and 'NoneType'

Here is the line where the error occurs:

if small_num_three < small_num_two:
    small_num_three = smallest
else: small_num_two < small_num_three
small_num_two = smallest 

Here is the full code:

#LargeSmall.py - This program calculates the largest and smallest of three integer values.
# Declare and initialize variables here
largest = None
smallest = None

firstNumber = None
secondNumber = None
thirdNumber = None

# Prompt the user to enter 3 integer values
firstNumber = input("Enter first integer: "  )
secondNumber = input("Enter second integer: "  )
thirdNumber = input("Enter third integer: "  )

# Write assignments, and necessary if else statements here as appropriate
if firstNumber > secondNumber:
    big_num_one = firstNumber
    small_num_one = secondNumber
else: secondNumber > firstNumber
big_num_one = secondNumber
small_num_one = firstNumber

if firstNumber > thirdNumber:
    big_num_two = firstNumber
    small_num_two = thirdNumber
else: thirdNumber > firstNumber
big_num_two = thirdNumber
small_num_two = firstNumber

if secondNumber > thirdNumber:
    big_num_three = secondNumber
    small_num_three = thirdNumber
else: thirdNumber > secondNumber
big_num_three = thirdNumber
small_num_three = secondNumber


if small_num_one < small_num_two:
    small_num_one = smallest
else: small_num_two < small_num_one
small_num_two = smallest

if small_num_three < small_num_two:
   small_num_three = smallest
else: small_num_two < small_num_three
small_num_two = smallest

if small_num_three < small_num_one:
   small_num_three = smallest
else: small_num_one < small_num_three
small_num_one = smallest


if big_num_one > big_num_two:
    big_num_one = largest
else: big_num_two > big_num_one
big_num_two = largest

if big_num_three > big_num_two:
    big_num_three = largest
else: big_num_two > big_num_three
big_num_two = largest

if big_num_three > big_num_one:
    big_num_three = largest
else: big_num_one > big_num_three
big_num_one = largest



print("The largest value is " + str(largest))
print("The smallest value is " + str(smallest))

I've seen solutions that say to remove the value of "none" from the initial declared variables, but how would I initialize them and then have the values stored in them afterwards if I don't initialize them in that way?


Solution

  • First you need to convert your input to int not str

    Like that :

    firstNumber = int(input("Enter first integer: "))
    secondNumber = int(input("Enter second integer: "))
    thirdNumber = int(input("Enter third integer: "))
    

    Second, you don't need to declare variables with None value cause they will have an input so it's not needed.

    This will run your code without errors. But the complexity of the code is too bad cause you have a lot of if, else statements.

    So if you want here is an optimized version of the code:

    # Initialize variables
    largest = None
    smallest = None
    
    # Prompt the user to enter 3 integer values
    firstNumber = int(input("Enter first integer: "))
    secondNumber = int(input("Enter second integer: "))
    thirdNumber = int(input("Enter third integer: "))
    
    # Assign values to largest and smallest variables
    if firstNumber >= secondNumber and firstNumber >= thirdNumber:
        largest = firstNumber
    elif secondNumber >= firstNumber and secondNumber >= thirdNumber:
        largest = secondNumber
    else:
        largest = thirdNumber
    
    if firstNumber <= secondNumber and firstNumber <= thirdNumber:
        smallest = firstNumber
    elif secondNumber <= firstNumber and secondNumber <= thirdNumber:
        smallest = secondNumber
    else:
        smallest = thirdNumber
    
    # Print the results
    print("The largest value is", largest)
    print("The smallest value is", smallest)