Искусство звездочки в python
Я хотел бы создать эту картину в python!
*
**
***
****
*****
******
*******
********
*********
**********
Я поступил так:
x=1
while x<10:
print '%10s' %'*'*x
x=x+1
который, к сожалению, производит что-то, состоящее из правильного числа точек, как показано на рисунке выше, но каждая из этих точечных звездочек отделена друг от друга расстоянием, а не оправданным правом в целом.
у кого-нибудь есть умный ум о том, как я могу достичь того, что я хочу?
5 ответов
'%10s' %'*'*x
анализируется как
('%10s' % '*') * x
потому что %
и *
операторы имеют одинаковый приоритет и группируются слева направо[docs]. Вам нужно добавить круглые скобки, например:
x = 1
while x < 10:
print '%10s' % ('*' * x)
x = x + 1
если вы хотите перебирать ряд чисел, считается более идиоматичным использовать for
цикл, чем цикл while. Вот так:
for x in range(1, 10):
print '%10s' % ('*' * x)
for x in range(0, 10)
эквивалентно for(int x = 0; x < 10; x++)
в Java или C.
объект string имеет rjust
и ljust
методы именно для этой вещи.
>>> n = 10
>>> for i in xrange(1,n+1):
... print (i*'*').rjust(n)
...
*
**
***
****
*****
******
*******
********
*********
**********
или же:
>>> for i in reversed(xrange(n)):
... print (i*' ').ljust(n, '*')
...
*
**
***
****
*****
******
*******
********
*********
**********
мой второй пример использует символ пробела в качестве символа для печати и * в качестве символа заполнения.
аргумент ljust
или rjust
- ширина терминала. Я часто использую их для разделения разделов с заголовками, когда у вас есть распечатка отладки chatty, например print '--Spam!'.ljust(80, '-')
.
чтобы быть точным, как ваша картина заканчивается 10 звездочек, вам необходимо.
for i in range(1, 11):
print "%10s"%('*' *i)