Python Forum
WHILE LOOP NOT RETURNING USER INPUT AFTER ZerroDivisionError! HELP!
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
WHILE LOOP NOT RETURNING USER INPUT AFTER ZerroDivisionError! HELP!
#1
#WHILE LOOP NOT RETURNING USER INPUT AFTER ZerroDivisionError! HELP!
# Using the Modulus operator to find the reminder of any two operands
while True:
    try:
        divisor = int(input("Enter divisor operand: "))
        break
    except ValueError as e:
        print(f"{e}; is not an acceptable value ")
    

def modulus(dividend):
        while True:
            try:
                remainder = dividend % divisor
                qoutient = dividend // divisor
                if remainder == 0:
                    return f"Operand {dividend} has {remainder} remainder after division by {divisor}, with {qoutient} as the qoutient!"
                else:
                    return f"Operand {dividend} has a reminder of {remainder} after division by {divisor} with {qoutient} as the qoutient !"
            except ZeroDivisionError as e:
                    return f"{e}:not divisble"


while True:
    try:
        dividend = int(input("Enter dividend operand to get remainder: "))
        break
    except ValueError as e:
        print(f"{e}; not a valid input")
        
result = modulus(dividend)
print(result)
deanhystad write Sep-30-2023, 09:06 PM:
Please post all code, output and errors (it it's entirety) between their respective tags. Refer to BBCode help topic on how to post. Use the "Preview Post" button to make sure the code is presented as you expect before hitting the "Post Reply/Thread" button.
Reply
#2
Thank You @deanhystad will do.
Reply
#3
#WHILE LOOP NOT RETURNING USER INPUT AFTER ZerroDivisionError! HELP!
# Using the Modulus operator to find the reminder of any two operands
while True:
    try:
        divisor = int(input("Enter divisor operand: "))
        break
    except ValueError as e:
        print(f"{e}; is not an acceptable value ")

def modulus(dividend):
    while True:
        try:
            remainder = dividend % divisor
            qoutient = dividend // divisor
            if remainder == 0:
                return f"Operand {dividend} has {remainder} remainder after division by {divisor}, with {qoutient} as the qoutient!"
            else:
                print( f"Operand {dividend} has a reminder of {remainder} after division by {divisor} with {qoutient} as the qoutient !" )
        except ZeroDivisionError as e:
            print(f"{e}: {divisor} not divisble by {dividend}")
            break
        
            
while True:
    try:
        dividend = int(input("Enter dividend operand to get remainder: "))
        break
    except ValueError as e:
        print(f"{e}; not a valid input")
        

result = modulus(dividend)
print(result)
Output:
Enter divisor operand: 0 Enter dividend operand to get remainder: 2 integer modulo by zero: 0 not divisble by 2
Reply
#4
I don't understand your modulus function. Why is there a while loop? No matter what you enter, the code returns a value the first time through the loop.

I don't understand your question. If you enter zero for the divisor, the modulus function returns "integer modulo by zero:not divisble". "integer module by zero" is the message returned when you tried modulo division with 0 as the divisor. ":not divisible" is the part you added on. What is your question?

If you want quotient and remainder, take a look at divmod().

The convention for functions is to place them at the top of the file, with any body code at the bottom of the file.
Reply
#5
My question:

Why is the loop not returning the user back to the input after the ZerroDivisionError. Just like the ValueError which returns the input after the user input wrong value.
Hope you get my question now?

Every thing works fine except the loop not returning the input for users after the ZerroDivisionError which just breaks out.
Reply
#6
The function doesn't loop because you return a value:
            except ZeroDivisionError as e:
                    return f"{e}:not divisble"  # Returns out of the function
And in your newer code you break out of the loop.
        except ZeroDivisionError as e:
            print(f"{e}: {divisor} not divisble by {dividend}")
            break  # This ends the loop
Your newer code will loop forever if you have a remainder.
            else:
                print( f"Operand {dividend} has a reminder of {remainder} after division by {divisor} with {qoutient} as the qoutient !" )
You should not have a loop inside the modulus() function. It would only make sense to have a loop if there was a way for the user to enter a different divisor. The loop belongs before the modulus() function is called. I would write a function like this:
def input_int(prompt):
    while True:
        try:
            inp = input(prompt)
            return int(inp)
        except ValueError as msg:
            print(msg)
This is a useful function that can be reused to input the dividend and the divisor.
dividend = input_int("Enter integer dividend: ")
while True:
    if divisor := input_int("Enter integer divisor: ")
        break
    print("Divisor cannot be zero.")
Reply
#7
Thank You Sooo much deanhystad. I will feedback after trying the code.
Reply
#8
[inline]

Hello deanhystad, thanks a bunchhh the code you suggested worked fine for all wrong inputs!!! Grateful.
Just learning Python, so getting my hands on writing codes related to real life problems.

[/inline]


def input_int(prompt):
    while True:
        try:
            inp = input(prompt)
            return int(inp)
        except ValueError as msg:
            print(msg)

dividend = input_int("Enter integer dividend: ")
while True:
    if divisor := input_int("Enter integer divisor: "):
        break
    print("Divisor cannot be zero.")    

def modulus(dividend):
    rem = dividend % divisor
    qout= dividend // divisor
    return (f"{dividend} modulo {divisor} has a remainder of {rem}")

print(modulus(dividend))
Output:
Enter integer dividend: 8 Enter integer divisor: 0 Divisor cannot be zero. Enter integer divisor: 2 8 modulo 2 has a remainder of 0
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  How to revert back to a previous line from user input Sharkenn64u 2 885 Dec-28-2024, 08:02 AM
Last Post: Pedroski55
  I think I need to delete input data because returning to start fails thelad 2 1,079 Sep-24-2024, 10:12 AM
Last Post: thelad
  User input with while loops chizzy101010 2 5,162 Aug-25-2024, 06:00 PM
Last Post: chizzy101010
  restrict user input to numerical values MCL169 2 1,827 Apr-08-2023, 05:40 PM
Last Post: MCL169
  user input values into list of lists tauros73 3 1,951 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 2,326 Dec-25-2022, 03:00 PM
Last Post: askfriends
Question Take user input and split files using 7z in python askfriends 2 2,294 Dec-11-2022, 07:39 PM
Last Post: snippsat
  Code won't break While loop or go back to the input? MrKnd94 2 1,930 Oct-26-2022, 10:10 AM
Last Post: Larz60+
Sad how to validate user input from database johnconar 3 4,003 Sep-11-2022, 12:36 PM
Last Post: ndc85430
  How to split the input taken from user into a single character? mHosseinDS86 3 2,125 Aug-17-2022, 12:43 PM
Last Post: Pedroski55

Forum Jump:

User Panel Messages

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