Python Forum
How to keep looping until the user input is valid ?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to keep looping until the user input is valid ?
#1
def get_valid_input(value):
    while True:
        try:
            return float(input(value))
        except ValueError:
            print('Oops, that was not a valid number. Try again...')

def calculate_set_of_cable(amp, cableSize):
    cableSize = int(cableSize)
    if cableSize not in (25, 35, 50, 70, 95, 120, 150, 195, 250, 300, 500):
        cableSize = input('Please enter a valid cable size')  # Please advise if user input wrongly, want to keep looping util the correct value.
    else:
        if cableSize == 25:
            return amp / 53
        elif cableSize == 35:
            return amp / 71
        # the code not finished yet



if __name__ == '__main__':
    while True:
        amp = get_valid_input('Please enter an Ampere:')
        cableSize = get_valid_input('Please enter the cable size:')
        set_of_cable = calculate_set_of_cable(amp, cableSize)
        print(f'The cables for {amp} are {set_of_cable:.2f} sets per phase')
        print ('The program end here, Good Luck!!\n----------------------')
Reply
#2
Do a similar thing to which you have done in the function get_valid_input.
Create a function get_valid_cablesize loop until the cable size is in the tuple of acceptable cable sizes.
Reply
#3
Thanks, will try!
Reply
#4
Note: call get_valid_input from the new function because you have that part working ok already.
If you get stuck, post what you have and explain what you expect to happen and what is actually happening and any errors received in error tags.
Reply
#5
def get_valid_input(value):
    while True:
        try:
            return float(input(value))
        except ValueError:
            print('Oops, that was not a valid number. Try again...')

def get_valid_cable_size(cableSize):
    while True:
        try:
            if cableSize in (25, 35, 50, 70, 95, 120, 150, 195, 250, 300, 500):
                return cableSize
                break
        except:
            print('Please enter a valid cable size')

def calculate_set_of_cable(amp, cableSize):
    if cableSize == 25:
        return amp / 53 #53 is current carry capacity of 25sqmm cable
    elif cableSize == 35:
        return amp / 71 #71 is current carry capacity of 35sqmm cable
        # the code not ended yet, until cable size is 500sqmm..

if __name__ == '__main__':
    while True:
        amp = get_valid_input('Please enter an Ampere:')
        cableSize = get_valid_input('Please enter the cable size:')
        cableSize = get_valid_cable_size(cableSize)
        set_of_cable = calculate_set_of_cable(amp, cableSize)
        print(f'The cables for {amp} ampere are {set_of_cable:.2f} sets per phase')
        print ('The program end here, Good Luck!!\n----------------------')
The code don't work, if I input the value not in tuple, the program doesn't loop until get corrected. Please help...I really no idea how to do that....Just 2 and half months python journey........
Reply
#6
In your function get_valid_cable_size you dont need a try except and you are not asking for a value in your loop so it gets stuck in a n infinite loop.
do the following.
  1. start a while loop
  2. call the function get_valid_input to get a value from user input
  3. check if the value is in acceptable cable sizes
    • if it is return the value
    • else tell the user to input a correct value and it will go back to the start of this loop
Reply
#7
This is a common question around here, so I went ahead and made a tutorial on how to do it.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#8
def get_valid_input(value):
    while True:
        try:
            return float(input(value))
        except ValueError:
            print('Oops, that was not a valid number. Try again...')

def get_valid_cable_size(cableSize):
    while True:
        get_valid_input(cableSize)
        if cableSize in (25, 35, 50, 70, 95, 120, 150, 195, 250, 300, 500):
            break
        print('Please enter a valid cable size')
    return cableSize

def calculate_set_of_cable(amp, cableSize):
    if cableSize == 25:
        return amp / 53 #53 is current carry capacity of 25sqmm cable
    elif cableSize == 35:
        return amp / 71 #71 is current carry capacity of 35sqmm cable
        # the code not ended yet, until cable size is 500sqmm..

if __name__ == '__main__':
    while True:
        amp = get_valid_input('Please enter an Ampere:')
        #cableSize = get_valid_input('Please enter the cable size:')
        cableSize = get_valid_cable_size('Please enter the cable size...:')
        set_of_cable = calculate_set_of_cable(amp, cableSize)
        print(f'The cables for {amp} ampere are {set_of_cable:.2f} sets per phase')
        print ('The program end here, Good Luck!!\n----------------------')
If possible, please revise my code above, so that I can learn and refer for my next program.. Thanks a lot
Reply
#9
In the function get_valid_cable_size the result of calling get_valid_input has not been assigned to the variable cableSize
Reply
#10
Thank!, now the program works after assigned as you mentioned.
But I don't want to see unacceptable value for cable size after I input wrongly.

Please enter an Ampere:2500
Please enter the cable size...:21
Please enter a valid cable size
21
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Script getting reindexing only valid error cubangt 1 794 Dec-07-2023, 04:06 PM
Last Post: cubangt
  WHILE LOOP NOT RETURNING USER INPUT AFTER ZerroDivisionError! HELP! ayodele_martins1 7 990 Oct-01-2023, 07:36 PM
Last Post: ayodele_martins1
  restrict user input to numerical values MCL169 2 869 Apr-08-2023, 05:40 PM
Last Post: MCL169
Question Use function, retry until valid Ashcora 8 1,405 Jan-06-2023, 10:14 AM
Last Post: Ashcora
  user input values into list of lists tauros73 3 1,023 Dec-29-2022, 05:54 PM
Last Post: deanhystad
Information How to take url in telegram bot user input and put it as an argument in a function? askfriends 0 1,026 Dec-25-2022, 03:00 PM
Last Post: askfriends
Question Take user input and split files using 7z in python askfriends 2 1,027 Dec-11-2022, 07:39 PM
Last Post: snippsat
Sad how to validate user input from database johnconar 3 1,836 Sep-11-2022, 12:36 PM
Last Post: ndc85430
  How to split the input taken from user into a single character? mHosseinDS86 3 1,137 Aug-17-2022, 12:43 PM
Last Post: Pedroski55
  Use pexpect to send user input alisha17 0 1,823 May-10-2022, 02:44 AM
Last Post: alisha17

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020