Posts: 69
Threads: 20
Joined: Sep 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
Posts: 8,156
Threads: 160
Joined: Sep 2016
Sep-24-2019, 12:25 PM
(This post was last modified: Sep-24-2019, 12:25 PM by buran.)
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/
Posts: 4,220
Threads: 97
Joined: Sep 2016
%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).
Posts: 8,156
Threads: 160
Joined: Sep 2016
(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]
Posts: 4,220
Threads: 97
Joined: Sep 2016
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.
Posts: 69
Threads: 20
Joined: Sep 2019
Sep-24-2019, 12:42 PM
(This post was last modified: Sep-24-2019, 12:42 PM by RavCOder.)
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.
Posts: 8,156
Threads: 160
Joined: Sep 2016
why do you want to do it without string formatting?
Posts: 69
Threads: 20
Joined: Sep 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.
Posts: 8,156
Threads: 160
Joined: Sep 2016
Sep-24-2019, 12:56 PM
(This post was last modified: Sep-24-2019, 12:57 PM by buran.)
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
Posts: 69
Threads: 20
Joined: Sep 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.
|