2016-09-20 129 views
-3

我必须建立一个空心菱形像这样的:空心菱形轮廓

****** 
    ** ** 
    * * 
    * * 
    ** ** 
    ****** 

继承人什么我到目前为止,

def hollow_diamond(w): 
h=int(w/2) 
while 0<h: 
    print('*'*h) 
    h=h-1 
i=1 
while i<(w/2+1): 
    print(i*'*') 
    i=i+1 

但是使用我的代码我只得到一半的钻石。

*** 
** 
* 
* 
** 
*** 

我应该使用循环,而不是一会儿就能完成的钻石?

+0

什么是你的问题? – Li357

+2

如果您标记您的问题“功课”? –

+0

作业标签已经burninated – inspectorG4dget

回答

0

建筑物的中空钻石手段,就像你说的,大概如下:

  1. 全星号(中间0空格)
  2. 中间
  3. A和2空格线A线与4中间的空格
  4. ...
  5. 与中间的l-2空格的行
  6. 中间
  7. A和l-6空间在中间
  8. 符合l-2空间的直线与l-4空间中间
  9. 一条线...
  10. 全星号线(l-l空格中间)

n是“步骤”,或者在每次迭代中“丢失”多少个星号。 l是你的广场的大小。

所以,你的算法由两部分组成,增加的空间和减少的空间。

所以,你的算法应该是这样的

for (spaces = 0; spaces < size/2 ; spaces = spaces + 1) 
    for (asterisk = 0; asterisk < size/2 - spaces; asterisk = asterisk + 1) 
     print '*' 
    for (space = 0; space < spaces*2; space = space + 1) 
     print ' ' 
    for (asterisk = 0; asterisk < size/2 - spaces; asterisk = asterisk + 1) 
     print '*' 
for (spaces = size/2 - 1; spaces >= 0; spaces = spaces - 1) 
    # The same inner code as above 

我刻意的没有把Python代码在那里,所以你可以适当做功课),但一旦你理解的算法,应该很容易。

0

我不会偷你的快乐修复你的作业,但这项工作是很有趣,所以我会给你另一种可能的版本给你一些想法:

def cool_diamond(w): 
    r = [] 
    for y in range(w): 
     s = '*' * (w - y) 
     r.append("{0}{1}{0}".format(s, ''.join(['-' for x in range(2 * y)]), s)) 

    return '\n'.join(r + r[::-1]) 

for i in range(3, 6): 
    print cool_diamond(i) 
    print('-' * 80) 

我强烈推荐你先花时间修理你的!否则,你将不会从练习中学到任何东西。

一旦你修好了你的工作,你会对付出的努力感到非常满意,然后......你可以考虑是否可以改进你的版本或重构。

快乐编码!

****** 
**--** 
*----* 
*----* 
**--** 
****** 
-------------------------------------------------------------------------------- 
******** 
***--*** 
**----** 
*------* 
*------* 
**----** 
***--*** 
******** 
-------------------------------------------------------------------------------- 
********** 
****--**** 
***----*** 
**------** 
*--------* 
*--------* 
**------** 
***----*** 
****--**** 
********** 
-------------------------------------------------------------------------------- 
1

您已经想出了如何打印每行的第一组星号;迄今为止工作很好。现在,你需要弄清楚要打印多少空间。我们采取的第一个循环,在那里你在W¯¯线网格打印^h星号。

您需要h左边的星号和h更多在右边;这是2 * H星号总数。这使得S = W - 2 * H空间在中间。

因此,对于每一行,您需要打印...

  • ^h星号
  • 小号空间
  • ^h多个星号

这是否把你推向你当前代码的有用更新?