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
  restrict user input to numerical values MCL169 2 925 Apr-08-2023, 05:40 PM
Last Post: MCL169
  user input values into list of lists tauros73 3 1,075 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,103 Dec-25-2022, 03:00 PM
Last Post: askfriends
Question Take user input and split files using 7z in python askfriends 2 1,107 Dec-11-2022, 07:39 PM
Last Post: snippsat
  Code won't break While loop or go back to the input? MrKnd94 2 964 Oct-26-2022, 10:10 AM
Last Post: Larz60+
Sad how to validate user input from database johnconar 3 1,934 Sep-11-2022, 12:36 PM
Last Post: ndc85430
  How to split the input taken from user into a single character? mHosseinDS86 3 1,184 Aug-17-2022, 12:43 PM
Last Post: Pedroski55
  Use pexpect to send user input alisha17 0 1,902 May-10-2022, 02:44 AM
Last Post: alisha17
  Multiple user defined plots with secondary axes using for loop maltp 1 1,462 Apr-30-2022, 10:19 AM
Last Post: maltp
  WHILE Loop - constant variables NOT working with user input boundaries C0D3R 4 1,496 Apr-05-2022, 06:18 AM
Last Post: C0D3R

Forum Jump:

User Panel Messages

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