Version 1

# Quiz for "Learning Python for PL/SQL Developers: Part 2"

by Arup Nanda

## Questions

1. What will be the output of the following Python code:

n1=25

if (int(n1)%5):

print ('n1 is a multiple of 5')

else:

print ('n1 is not a multiple of 5')

2. What will be output of the following code:

n1=25

if (n1%5 == 0):

print ('I am at the right place')

print ('I am a multiple of 5')

else:

print ('I am at the wrong place')

print ('I am not a multiple of 5')

print ('End of program')

3. You want to display all even numbers between 30 and 20, in  reverse order, for example, 30, 28, 26, and so on down to 20. You wrote the following code:

for n in (30,20,-2):

print n

Will the output match what you intended?

4. You want to print all even numbers between 20 and 30 (both numbers inclusive). You write the following:

for n in range(20,30, 2):

print n

Will it produce the desired outcome?

5. You want to display all numbers between 5 and 10, so you wrote the following program:

n1 = 5

while (n1<11):

print ('n1 = ',n1)

n1 = n1 + 1

Your logic is that you increment `n1` by 1 and the `while` loop will continue until (but not including) 11. Will the program produce the following output?

5

6

7

8

9

10

1. It will be `n1 is not a multiple of 5`. Why? `n1%5` will be 0, which means it's a multiple of 5. However, any zero value in a boolean comparison will equate to false; so the `else` block will be executed.

2. It will be this:

I am at the right place

I am a multiple of 5

I am not a multiple of 5

End of program

Why was `I am not a multiple of 5 `printed even if `n1 `is 25, which is a multiple of 25? The line `print ('I am not a multiple of 5') `is not indented. Therefore, it will not be executed as a part of the `else` block. Only the line `print ('I am at the wrong place')` is indented; so it will be executed as a part of the `else` block.

3. No. The output will be this:

30

10

-2

The reason is simple. You didn't include the `range `function. The expression `(30,20,-2)` simply means these three values and `i` will iterate between these three. You should have written `range(30,20,-2)`.

4. It will produce the following output:

20

22

24

26

28

Note that 30 is not in the list. When you use the `range` function, the second number (but not including it) is the higher bound  This is very different from PL/SQL, where both bounds are included. If you want to include 30, use 31 as the upper bound.

5. It will not. The program will continue in an infinite loop with the value of `n1` stuck at 5. Why? It's because the statement `n1 = n1 + 1` is not indented at the `while` loop level; so it will be executed after the completion of the `while` loop. Since the `n1` value will not be incremented, the `while` loop condition (`n1<11`) will never occur and, hence, the loop will continue infinitely.

Back to the Part 2 article.