Home > Software engineering >  Python Input try and except scenario
Python Input try and except scenario

Time:05-10

I'm required to create an input with a loop and print out the largest and smallest number within the many user inputs which should all be floats. At the same time, there should be a try:/except: error message of "Invalid input" in case the user inputs anything else apart from the float or an ending loop message triggered by an input of "done".

My code below does not print the smallest digit. What could be the problem?

largest  = None
smallest = None

while True:
    sval = input("Enter a number:")
    if num == "finish": #Type 'finish' to get the output
        break
    try:
        fval = float(sval)  #Convert input to float

        #Get largest value
        if largest is None:
            largest = fval
        elif fnum > largest:
            largest = fval

        #Get smallest value
        elif smallest is None:
            smallest = fval
        elif fval < smallest:
            smallest = fval

    except:
        #If the user input is not 'finish' or a number
        print("Invalid input")
        continue


print("Largest value is",largest)
print("Smallest value is",smallest)

CodePudding user response:

Instead of using elif in the smallest number case, use another set of if - elif.
This is because let's say you gave input of 5 then in the first iteration the value of largest is None, so the command will go into the first if statement and will assign the value of 5 to the largest, after this, it will skip all the elif below it.
Let's say you again provide an input of 6, this time the first elif condition will be executed and the largest variable will be assigned a valued of 6. Again it will skip all the elif below it.

So the smallest value is not getting updated in these cases. Hence, you will get the wrong answer.

CodePudding user response:

       #Get largest value
       if largest is None:
           largest = fval
       elif fnum > largest:
           largest = fval

       #Get smallest value
       elif smallest is None:
           smallest = fval
       elif fval < smallest:
           smallest = fval

When you try to get the smallest value, then you are using 'elif' instead of 'if'.

CodePudding user response:

It would help to know what values you are using for input. Also, your code is displaying funcky above so it is difficult to know if I am reading it properly.

With all that said, change "elif smallest is None:" to "if smallest is None:" In other words, change the elif to if when checking for smallest.

I believe your code works unless you start with the smallest value.

  • Related