Using a while loop to check divisibility of a range of numbers

Question:

I am trying checking the divisibility of 5 and 7 for the numbers in the range from 1 to 41 using a while loop. I know that there are other options, such as a for loop, but I would like to understand how the code needs to be set up with a while loop. This is the code I wrote:

n = 1
m = 41

div = [5,7]

while(n<=m): 
    if n == 13:
        continue
    if n%div[0]==0 and n%div[1]==0:
        print(n, 'the number is divisible for both 5 and 7')    
    elif n%div[0]==0:
        print(n, 'the number is divisible for 5')    
    elif n%div[1]==0:
        print(n, 'the number is divisible for 7')
    else:
        print(n, 'is divisible for neither 5 or 7')

On the Jupyter session, it didn’t return an error, but it takes a significant amount of time to process the output. Can someone tell me how to properly modify this code?

Asked By: creativity

||

Answers:

Actually, your code will never get out of the while loop. It will always be stuck in the while loop. What you need to rechange the n value in the while loop:

n = 1
m = 41

div = [5,7]

while(n<=m): 
    if n == 13:
        n += 1
        continue
    if n%div[0]==0 and n%div[1]==0:
        print(n, 'the number is divisible for both 5 and 7')    
    elif n%div[0]==0:
        print(n, 'the number is divisible for 5')    
    elif n%div[1]==0:
        print(n, 'the number is divisible for 7')
    else:
        print(n, 'is divisible for neither 5 or 7')
    n += 1
Answered By: TheFaultInOurStars

You need to increment n by adding:

n += 1

at the bottom of the while loop. You also need to remove the continue statement at the top of the body of the while loop. Without these two fixes, the program will attempt to repeatedly check whether a number is divisible by 5 or 7 without ever terminating.


If you must skip a specific number, you should revise the if statement to look like the following:

if n == 13:
    n += 1
    continue
Answered By: BrokenBenchmark

The continue would block the while loop to go any further when n == 13.

Other than that, the code and algorithm are actually correct. You just forgot to set an incremental structure (n+=1).

n = 1
m = 41

div = [5,7]

while(n<=m): 
    if n == 13:
        n+=1
    if n%div[0]==0 and n%div[1]==0:
        print(n, 'the number is divisible for both 5 and 7')    
    elif n%div[0]==0:
        print(n, 'the number is divisible for 5')    
    elif n%div[1]==0:
        print(n, 'the number is divisible for 7')
    else:
        print(n, 'is divisible for neither 5 or 7')
    n+=1
Answered By: kiarthis