#python #python-3.x
#python #python-3.x
Вопрос:
Я напечатал треугольную пирамиду следующим образом:
*
* *
* * *
* * * *
* * * * *
Мой код:
for i in range(1,6):
for j in range(6-i):
print(" ", end="")
for j in range(i):
print("*", end=" ")
print()
Я хочу напечатать треугольник, подобный этой звездообразной пирамиде:
Если я ввожу 1: печатаю первое изображение, затем, если я ввожу 2, печатаю второе. Я хочу знать фактическую логику.
Комментарии:
1. Вы должны напечатать звездочки и пробелы.
2. Важной частью обучения программированию является изучение того, как решать проблемы. Отказываться и запрашивать решение онлайн не способствует этому.
Ответ №1:
Учитывая масштабируемость кода, я определил два параметра, size
и layer
:
size
является ли высота треугольника также номерами звездочек внизуlayer
это слой треугольников, который вы хотите сложить
Вот несколько ключевых точек:
-
str.center
здесь очень полезно. Если мы знаемwidth
, он может автоматически поместить его в середину. итак, с помощьюcenter
, если мы вычислим номер звезды иmargine
между ними. мы можем легко построить треугольник. -
реализуйте функцию для создания одного треугольника: сначала выведите
top
, затемbody
последнийbottom
. -
составьте отдельные треугольники вместе в одном слое, слой 0 имеет 1 треугольник, слой 1 имеет 2 треугольника… мы можем просто вычислить количество треугольников в текущем слое и объединить их соответствующей строкой, а затем использовать
total_width
, чтобы снова поместить их в центр.
Вот мое решение:
from functools import reduce
def generate_triangle(size, width):
res = []
# print top
res.append('*'.center(width))
# print body
margin = 1
for i in range(size - 2):
res.append(('*' ' ' * margin '*').center(width))
margin = 2
# print bottom
res.append(' '.join('*' * size).center(width))
return res
def generate_triangles(size, layer):
width = size * 2 - 1
total_width = layer * (width 1) - 1
res = []
for i in range(layer):
res = reduce(lambda x, y: x [' '.join(y for _ in range(i 1)).center(total_width)],
generate_triangle(size, width), [])
return res
тестовый код:
def triangle_test():
def print_matrix(matrix):
for row in matrix:
print(row)
print()
print_matrix(generate_triangles(6, 1))
print_matrix(generate_triangles(5, 2))
print_matrix(generate_triangles(4, 4))
вывод:
*
* *
* *
* *
* *
* * * * * *
*
* *
* *
* *
* * * * *
* *
* * * *
* * * *
* * * *
* * * * * * * * * *
*
* *
* *
* * * *
* *
* * * *
* * * *
* * * * * * * *
* * *
* * * * * *
* * * * * *
* * * * * * * * * * * *
* * * *
* * * * * * * *
* * * * * * * *
* * * * * * * * * * * * * * * *
Надеюсь, это поможет вам, и прокомментируйте, если у вас возникнут дополнительные вопросы. : )
Комментарии:
1. Мне не нужен код. Я хочу знать, как это работает. @recnac
2. Я отредактировал свой ответ и добавил ключевой момент моих идей. Если у вас все еще есть какая-то часть, которая не ясна, просто скажите мне @Sabbir