这就是我认为这个练习试图教给你的东西。
让我们来看看你的三角码(它根本没有什么问题):
size = int(input())
for i in range(size):
for j in range(i, size):
print(" ", end = "")
for j in range(i):
print("*", end = "")
for j in range(i + 1):
print("*", end = "")
print()
并将其转换为返回行/行列表的函数:
def triangle(size):
rows = []
for i in range(size):
row = []
for j in range(i + 1, size):
row.append(" ")
for j in range(2 * i + 1): # i + (i+1) = 2*i+1.
row.append("*")
for j in range(i + 1, size): # Let's add spaces at the end, too.
row.append(" ") # It'll make sense in a moment!
rows.append("".join(row))
return rows
for row in triangle(5):
print(row)
# *
# ***
# *****
# *******
# *********
现在我们可以稍微调整一下以使用任何矩形字符串列表“构建块”而不是*:
def triangle(size, block):
rows = []
for i in range(size):
strip = [[] for _ in block]
for j in range(i + 1, size):
for s, b in zip(strip, block):
s.append(" " * len(b)) # Space as wide as the building block
for j in range(2 * i + 1):
for s, b in zip(strip, block):
s.append(b)
for j in range(i + 1, size):
for s, b in zip(strip, block):
s.append(" " * len(b))
for s in strip:
rows.append("".join(s))
return rows
# Make a triangle out of ["abc",
# "def"]:
for row in triangle(3, ["abc", "def"]):
print(row)
# abc
# def
# abcabcabc
# defdefdef
# abcabcabcabcabc
# defdefdefdefdef
这是一个有点棘手的代码!尝试在此代码中添加一些 print() 语句,看看它是如何工作的。 zip() 并行循环两个列表。实际上,您应该尝试自己从头开始重写此函数。
回报非常令人满意:?
fractal = triangle(4, triangle(4, ["*"]))
for row in fractal:
print(row)
# *
# ***
# *****
# *******
# * * *
# *** *** ***
# ***** ***** *****
# *********************
# * * * * *
# *** *** *** *** ***
# ***** ***** ***** ***** *****
# ***********************************
# * * * * * * *
# *** *** *** *** *** *** ***
# ***** ***** ***** ***** ***** ***** *****
# *************************************************
当然你现在也可以创建一个“三角形的三角形”:
for row in triangle(2, triangle(2, triangle(2, ["()"]))):
print(row)
# ()
# ()()()
# () () ()
# ()()()()()()()()()
# () () ()
# ()()() ()()() ()()()
# () () () () () () () () ()
# ()()()()()()()()()()()()()()()()()()()()()()()()()()()
这里的教训是概括一个问题:从表面上看,很难制作一个由三角形组成的三角形。但是用 whatever 制作一个三角形相对容易。
如果我们编写一些代码可以用任何东西制作三角形(例如我们的abc def 示例),我们可以使用该代码用三角形制作三角形。
与其他答案不同,我们不需要为这里的两层“三角形”提供单独的逻辑。