Python Forum
Explain this code - for loop - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Explain this code - for loop (/thread-21309.html)



Explain this code - for loop - RavCOder - Sep-24-2019

Hi,
I'm doing Hackerrank's challenge "Learn to Code in 30 days" and this is link for the challenge.
However I was trying this :

#!/bin/python3

import math
import os
import random
import re
import sys



if __name__ == '__main__':
    n = int(input())

    i = 0
    for i in range (1,11):
       for j in range (n):
     print ( i * j ) 
but doesn't work and I found the solution :
#!/bin/python3

import math
import os
import random
import re
import sys



if __name__ == '__main__':
    n = int(input())

    print( *['%d x %d = %d'%(n, i, n*i) for i in range(1, 11)], sep="\n" )
My question is that I don't understand the soultion that the only line of code and what are% d and % in Python?
Regards,
RavCoder


RE: Explain this code - for loop - buran - Sep-24-2019

in your first snippet you need to indent the print 2 levels - to be indented one level compared to inner loop.

for i in range(1, 11):
    for j in range(n):
        print (i * j)
few observations:
  • you may want to change the second for loop to start from 1 and include n. Currently it will start from 0 and will not include n
  • you may want to change the print function to display also bot multiples not just the result.

in the second snippet the syntax with d% that you ask about is called string formatting. that is so called old-styled string formatting. there is newer str.format() method and from 3.6+ - also f-strings
Here is the docs for string format syntax
Here is comparison between old-style and str.format() method: https://pyformat.info/


RE: Explain this code - for loop - ichabod801 - Sep-24-2019

%d is old style string formatting, it means to format the item as a integer. The items to be formatted are in the tuple on the right side of the % operator.

In your code, you don't need the second for loop. Get rid of that, and in the 'for i' loop print(i * n).


RE: Explain this code - for loop - buran - Sep-24-2019

(Sep-24-2019, 12:28 PM)ichabod801 Wrote: In your code, you don't need the second for loop.
Oh, I didn't check the assignment. Thought it's a multiplication table for all numbers in [1,n]


RE: Explain this code - for loop - ichabod801 - Sep-24-2019

That's what I thought at first, too, but the link seemed safe. And note to RavCOder, this is why you avoid links in forum post. We get our fair share of shady people here, so many of the regulars are very wary about clicking links. That's why it's better if you can explain the problem yourself. Also, not just that it doesn't work, by how it is not working.


RE: Explain this code - for loop - RavCOder - Sep-24-2019

Thanks for your advices, but how can I do to print this : " result = n * i " without use string formatting?
I thought of it as a matrix where I put in the first operator loop n and in the second operator i then did the product of both.
I don't know if my reasoning is correct.
P.s Sorry I will remember to explain better my problem I don't know that in this forum there are shady people.


RE: Explain this code - for loop - buran - Sep-24-2019

why do you want to do it without string formatting?


RE: Explain this code - for loop - RavCOder - Sep-24-2019

I thought you could do without, but if they are needed I will do them with string formatting only I didn't want to use that solution because it's not mine.


RE: Explain this code - for loop - buran - Sep-24-2019

You can do most things in several ways and it's up to you what to choose. you can print without string formatting but it's just not so 'nice'

n = 5
for i in range(1, 11):
    print(n, '*', i, '=', n * i)
# using f-strings
for i in range(1, 11):
    print(f'{n} * {i:<2} = {n * i}')
both loops will produce the desired output, however the second one will have = alligned
Output:
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45 5 * 10 = 50
Output:
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45 5 * 10 = 50



RE: Explain this code - for loop - RavCOder - Sep-24-2019

Thank you very much, I don't understand though if I was close to the solution according to you, because I'm doing it also to learn how to solve the tasks that are there and increase my logic in the programming.