Python Forum

Full Version: Looping if condition isnt met
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
elif time_limit_ask[0] == "r" or time_limit_ask[0] == "R":
        def random_questions():
            test_1 = input ("enter number ")
            test_2 = input ("enter number ")
            int(test_1)
            int(test_2)
            if test_1 > test_2:
                random_questions()
            else:
                pass
            intro_1_complete = True
            time_limit_exists = True
        random_questions()
I have this code above here.

Output:
enter number 4 enter number 2 enter number 4 enter number 2 enter number 5 enter number 6 Do you want a time limit per question? - or you can have random!
when number 1 is larger everything works fine, however when number 1 is smallest it should go to the next bit of code but instead it asks the same question again

whats the issue?
Your code starts with "elif".
It would seem some portion is missing.

Paul
This code cannot succeed for several reasons. First int(test_1) does not transform test_1 into an integer. For this you would need test_1 = int(test_1). It means that the code is currently comparing strings. Second, the global variables intro_1_complete and time_limit_exists will not be set by the function random_questions() because in this function, the variables with that names are local variables.

Here is a more viable code
elif time_limit_ask[0] in ('r', 'R'):
    def random_questions():
        while True:
            test_1 = int(input("Enter first number ")
            test_2 = int(input("Enter second number ")
            if test_1 <= test_2:
                return
    random_questions()
    intro_1_complete = True
    time_limit_exists = True
Why do you have a function definition inside other code? Usually you don't want to do that without a good reason because it's much harder to understand the flow of the program.

You've only put a snippet of your code above, and I don't think it's possible to tell what's happening. If the problem is in that function, write a small test program that calls it with number 1 smallest and show the output and explain why you think it should be doing something else.

Looks like that part of the code is working properly, (it exits when the first input is smaller), but then some other part of your code that you haven't shown starts it again.
As Griboullis mentioned you are not comparing ints, you are comparing strings. When comparing strings '0' > '9' and '123456' < '2'. So your code works as long as you limit yourself to single digit numbers in the range 1 through 9. If you want to compare numbers you need to convert to a number. I would surround the conversion with try/except to prevent exiting the program if the user types something that isn't a number

It is odd defining a function inside of an if statement. It is valid Python, but really odd. It is also odd using recursion for something like this when a loop is simpler. I would write the code like this:
elif time_limit_ask[0] in ('r', 'R'):
    while True:
        try:
            if int(input("enter number ")) > int(input("enter number ")):
                break
        except ValueError:
            pass
    intro_1_complete = True
    time_limit_exists = True
thanks for the help!
the function calls itself. that's recursion. when it unwinds it is going to complete the finishing steps for two pairs of questions in reverse order. so you can see the results of a previous input after the results of a later input. avoid recursion unless you have a specific need for it.

code that begins with "elif" is always suspect. there may be code we cannot see. that hidden code may have bugs in it.