几乎可以肯定是作业,所以这里有一个线索。
计算一行前的空格数和该行中的星数。您正在寻找的是行号与这两个值之间的关系。
然后你可以使用两个连续for
的循环,一个增加星数,另一个减少它。
在这些循环中的每一个中,都会有两个连续的循环,以打印出所需数量的空格,然后是所需数量的星号,然后是换行符。
如果您在阅读上述内容后仍然遇到问题,请考虑这一点。对于 (奇数,正如您在评论中声明的那样) 的输入n
,空间计数从 开始,(n - 1) / 2
星数从 开始1
。对于随后的每一行,空格数减少 1,1
星数增加 0 2
。
这一直有效,直到空间计数达到0
,然后你转身走另一条路,确保你不打印中间线两次。
一旦星数达到0
,你就完成了。
现在您只需将该规范转换为代码 :-)
现在,由于您在评论中表示您有兴趣制作自己的解决方案,而不仅仅是交给代码,所以我很乐意为您提供一些您可以检查自己的解决方案的东西。这是我将使用的伪代码:
# Input data, check and init counters.
input n
make sure n is odd and greater than 2
set numspaces to (n-1) / 2
set numstars to 1
# Gradually get wider until just before middle line.
while numspaces > 0:
for i = 1 to numspaces: output " "
for i = 1 to numstars: output "*"
output newline
subtract 1 from numspaces
add 2 to numstars
# Gradually get thinner until end.
while numstars > 0:
for i = 1 to numspaces: output " "
for i = 1 to numstars: output "*"
output newline
add 1 to numspaces
subtract 2 from numstars
而且,作为最后的练习,您可以重构:
for i = 1 to numspaces: output " "
for i = 1 to numstars: output "*"
output newline
到一个单独的函数中,因为它在两个循环之间是通用的。
现在,既然你已经有了自己的代码,下面是我用于概念证明的 Python 代码,为了完整性而包含在内:
def lineout (sp, st):
s = ""
for i in range (sp): s = "%s "%(s)
for i in range (st): s = "%s*"%(s)
print s
n = 21
numspaces = (n-1) / 2
numstars = 1
while numspaces > 0:
lineout (numspaces, numstars)
numspaces -= 1
numstars += 2
while numstars > 0:
lineout (numspaces, numstars)
numspaces += 1
numstars -= 2
如果您使用更现代的功能,您可能可以用 Python 更简洁地编写它,但这会破坏快速理解和易于翻译的目的。只需更改n
为您想要的任何数字(奇数且大于 2,前提是生成的钻石适合您的终端)并享受输出:-)
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*********************
*******************
*****************
***************
*************
***********
*********
*******
*****
***
*