我进行了编程练习,我们必须创建一个程序,该程序根据迷你三角形之一的给定高度(用户输入)在金字塔图形内生成金字塔。
我设法创建了顶层金字塔,但是在后续图层上遇到困难时,金字塔变得不合适了。
这是我到目前为止一直在努力的事情:
h = int(input())
for r in range (1, h+1):
for i in range(1,h+1):
if r == 1:
print (((" " * ((((h * 2) - 1) * h) - h - i + 1)) + ("*" * (i * 2 - 1)))*(r*2-1))
else:
print (((" " * ((((h * 2) - 1) * h) - h - i + 1 - (r*2-1))) + ("*" * (i * 2 - 1)))*(r*2-1))
这应该是'h'为3时的预期输出
*
***
*****
* * *
*** *** ***
***************
* * * * *
*** *** *** *** ***
*************************
但是我得到的却是这个:
*
***
*****
* * *
*** *** ***
***** ***** *****
* * * * *
*** *** *** *** ***
***** ***** ***** ***** *****
答案 0 :(得分:2)
这是您可以使用的功能。定义构成金字塔的各个组成部分有助于找出使用的正确公式。
def pyramid(h = 1):
pyr = ['']*h
base = 2*h - 1
for i in range(h):
pyr[i] = " " * (h-i-1) + "*"*(2*i+1) + " " * (h-i-1)
for i in range(h):
for j in range(h):
print(" " * base * (h-i-1) + pyr[j]*(2*i+1) + " " * base * (h-i-1))
带有h = 4
>>> pyramid(4)
*
***
*****
*******
* * *
*** *** ***
***** ***** *****
*********************
* * * * *
*** *** *** *** ***
***** ***** ***** ***** *****
***********************************
* * * * * * *
*** *** *** *** *** *** ***
***** ***** ***** ***** ***** ***** *****
*************************************************
答案 1 :(得分:0)
我使用了字符串和列表,而不是使用复杂的方法。
def pyramid(h):
rows = [" * ", " *** ", "*****"]
for i in range(h):
out = []
for x in range(1,len(rows)+1):
temp = ""
for _ in range(i+1):temp += rows[x-1]
for _ in range(i, 0, -1):temp += rows[x-1]
out.append(temp+"\n")
print("".join([(" "*(h-1-i))+val for val in out]), end = "")
使用h = 3
进行以下测试时:
pyramid(3)
输出符合预期:
* *** ***** * * * *** *** *** *************** * * * * * *** *** *** *** *** *************************