如果您使用迭代方法来查看问题(如我所推荐的那样)。您会发现您正在寻找的并不是在循环中的每个 int 中添加三个。
让我们先让金字塔的一半正确。这样做需要一个简单的循环。(我将在 Python 中运行它,使它有点像伪代码):
def pyramid(rows):
for row_num in range(1,rows+1):
print '*' * row_num
这为我们提供了 5 的以下输出:
*
**
***
****
*****
我们已经完成了一半,我们现在真正需要的是从另一侧金字塔的中间开始的镜像。
对于初学者,我们可以计算出每行的星数,如果我们看看它总是小于两倍行数的事实。(1、3、5、7等)
这给了我们以下代码:
def pyramid(rows):
for row_num in range(1,rows+1):
num_stars = (row_num * 2) - 1
print '*' * num_stars
产生以下输出:
*
***
*****
*******
*********
现在我们唯一缺少的是对齐。为了计算每行正确缩进所需的空格数,我们可以再次查看模式。在这种情况下,为了使线条居中,我们需要将每条线偏移一个以每行一个减少的值的值。
第一行开始之前需要四个空格,第二行需要三个空格,等等。那么,该值与什么相关?行数本身。
我们可以从这个模式中看出,偏移输出所需的空格数实际上等于行数减去 row_num。这给了我们以下代码:
def pyramid(rows):
for row_num in range(1,rows+1):
num_stars = (row_num * 2) - 1
offset = rows - row_num
print (' ' * offset) + ('*' * num_stars)
现在我们得到最终结果:
*
***
*****
*******
*********
而且……我们完成了!
为简洁起见,我在此代码示例中使用了 Python。由于您使用的是较低级别的语言,因此您无法将字符相乘以生成字符串。
很多人会说“写一些嵌套循环”。我,我相信最好编写一个模仿高级语言所需功能的函数。
如果您可以创建一个函数来为您执行字符串乘法,那么您可以使用相同的代码两次!
如果 Python 没有内置的字符串乘法,您可以轻松地创建一个函数,例如:
def multiply_char(char,number_of_times):
s = ''
for i in range(number_of_times):
s += char
return s
现在,您可以在此分配中使用该函数两次,并且在没有嵌套循环的情况下保持代码看起来更干净(它提供了稍后函数调用不会提供的可读性)。
我们在头脑中分解这些小程序的方式是编写好代码的一半。你的老师正试图让你分析问题并将其分解成更小的部分。最好从做某事的代码开始,然后对其进行迭代,直到它功能完整。
快乐编码!