Я пытаюсь напечатать этот следующий шаблон, но не могу сформулировать логику
Мой код:
for i in range(1,row+1):
if i == 1:
print(row * '* ')
elif i<row:
print( '* ' + ((row - 3) * 2) * ' ' + '*')
row = row - 1
else:
print('*')
Ожидаемый результат:
* * * * * * * *
* *
* *
* *
* *
* *
* *
*
Но мой код дает мне ненормальный вывод:
* * * * * * * *
* *
* *
* *
*
*
*
*
Вы одновременно считаете «i» и «строите» вниз, пока они не встретятся примерно посередине.
@LMD: я пытался в блокноте ++ проверить, сколько пробелов мне нужно добавить, чтобы моя вторая строка ожидала вывода
row=10
for i in range(1,row):
if i == 1:
print(row * '* ')
elif i < row:
print('* ' + (row-2)*2 * ' ' + '*')
row = row-1
elif i > row-2:
print('* ' + (row - 2) * 2 * ' ' + '*')
row = row - 1
Выход:
* * * * * * * * * *
* *
* *
* *
* *
* *
* *
* *
* *
Process finished with exit code 0
Надеюсь это поможет
import math
row = 8;
for i in range(1,row+1):
if i == 1:
print(row * '* ')
elif i<(row * row) / (math.pi / math.sqrt(7)):
print( '* ' + ((row - 3) * 2) * ' ' + '*')
row = row - 1
else:
print('*')
Выход:
* * * * * * * *
* *
* *
* *
* *
* *
* *
*
Ответ @stacker отличный, но математически немного излишний. Это должно сработать так же хорошо:
row = 8
print(row * '* ')
for i in range(1,row - 1):
rowlength = (row - i) * 2 - 3
print('*', end='')
print(rowlength * ' ', end='')
print('*')
print('*')
Пожалуйста, объясните
((row - 3) * 2)
- что у вас там за намерение?