3
votes
count = 1
for i in range(10):
    for j in range(0, i):
        print(count, end='')
        count = count +1
    print()
input()

I am writing a program that should have the output that looks like this.

1

22

333

4444

55555

666666

7777777

88888888

999999999   

With the above code I am pretty close, but the way my count is working it just literally counts up and up. I just need help getting it to only count to 9 but display like above. Thanks.

enter image description here

13
I came here to make sure I was indenting properly. - Jeremy A. West

13 Answers

10
votes

You're incrementing count in the inner loop which is why you keep getting larger numbers before you want to

You could just do this.

>>> for i in range(1, 10):
        print str(i) * i


1
22
333
4444
55555
666666
7777777
88888888
999999999

or if you want the nested loop for some reason

from __future__ import print_function

for i in range(1, 10):
    for j in range(i):
        print(i, end='')
    print()
2
votes

This works in both python2 and python3:

for i in range(10):
  print(str(i) * i)
2
votes
for i in range(1,10):
    for j in range(0,i):
        print i,
print "\n"
1
votes

The simple mistake in your code is the placement of count = count + 1. It should be placed after the second for loop block. I have made a simple change in your own code to obtain the output you want.

    from __future__ import print_function
    count = 0
    for i in range(10):
        for j in range(0, i):
            print(count,end='')
        count = count +1
    print()

This will give the output you want with the code you wrote. :)

1
votes

This is one line solution. A little bit long:

print ('\n'.join([str(i)*i for i in range(1,10)]))
0
votes

Change print(count, end='') to print(i + 1, end='') and remove count. Just make sure you understand why it works.

0
votes

Is this what you want:

for i in range(10):
    print(str(i) * i)
0
votes
"""2. 111 222 333 printing"""

for l in range (1,10):
    for k in range(l):
        print(l,end='')
print()
0
votes
count = 1
for i in range(9):
    for j in range (-1, i):
        print (count, end = '')
    count = count + 1
    print (" ")
0
votes

What you are trying to do involves a mathematical concept called repunit numbers

you could also do it as follows:

for i in range(1,n):
    print (int(i*((10**i)-1)/9))
0
votes

I realised that the problem is solved but here's how you wanted your code to look like.

count=0
for i in range(10):
    for j in range(0, i):
        print (count, end='')
count +=1
print()

i think @Dannnno answer is shorter and straight to the point :)

0
votes

This can be your one line code to problem

print(''.join([str(x)*x+ '\n' for x in range(1,10)]))
-1
votes

Others have suggested some interesting solutions but this can also be done mathematically using a simple observation. Notice that:

1 - 1*1

22 - 2*11

333 - 3*111

4444 - 4*1111

and so on ....

We can have a general formula for producing 1,11,111,1111,... at every iteration. Observe that:

1 = 9/9 = (10 - 1)/9 = (10^1 - 1)/9

11 = 99/9 = (100 - 1)/9 = (10^2 - 1)/9

111 = 999/9 = (1000 - 1)/9 = (10^3 - 1)/9

......

that is we have (10^i - 1)/9 for the ith iteration.

Now it is simple enough to implement. We will multiply i with the above formula in each iteration. Hence the overall formula is:

i*(10^i - 1)/9 (for every ith iteration). Here's the python code:

for i in xrange(1,10):
    print i*(10**i-1)/9

Hope this helps.