Python Forum

Full Version: Imported function causes prompt repetition
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I have an assignment to prompt for three numbers, then print the largest, smallest, and average of the numbers. I'm to allow floating-point numbers, so I'm importing a module to accommodate that.

Here's the code I'm using to solicit the numbers:
from pcinput import getFloat
first_number = getFloat( "First number: " )
second_number = getFloat( "Second number: " )
third_number = getFloat( "Third number: " )
When I run the script, there's a prompt for the first number. When the number is provided, the prompt for the first number repeats, instead of the prompt for the second number. Typing a string of letters shows the error "That is not a number -- please try again", but typing a number shows the same prompt again. (I also can't escape from the repetition, and I have to restart PowerShell to get out of the program, but that's another problem.)

Here's the code for the getFloat function:
def getFloat( prompt ):
    while True:
        try:
            num = float( input( prompt ) )
        except ValueError:
            print( "That is not a number -- please try again" )
            continue
            return num

I've tried to use the getFloat function in other scripts as well, but the same problem occurs, so I suspect there's something wrong with the getFloat function.

I'm running Python 3.7. The script is in Windows PowerShell.
Looks to me like the last line of getFloat should be dedented / moved to the try-block.
Thanks for your quick response, micseydel. Detenting the last line repaired the problem, and all is running properly now.

The corrected function is

def getFloat( prompt ):
    while True:
        try:
            num = float( input( prompt ) )
        except ValueError:
            print( "That is not a number -- please try again" )
            continue
        return num
I believe that more traditional way is micseydel other suggestion (more concise):

def getFloat(prompt):
    while True:
        try:
            return float(input(prompt))
        except ValueError:
            print('That is not a number -- please try again')