2017-02-23 40 views
-6

我正在练习打印各种图案,并且卡在六角形图案中。我使用星号(*)打印它。打印使用星号的六角形图案

它应该是动态的。我已经差不多完成了它,但是仍然停留在最后部分我已经把所有部分分成几块,并且使用while循环和条件执行所有块。

sideLength = 5 

totalLength = (sideLength)*2 + (sideLength-2) 

loop =1 

while loop<=totalLength : 
    if (loop==1) or (loop==totalLength): 
     print " "*((totalLength - sideLength)//2) + "*"* sideLength + " "*((totalLength- sideLength)//2) 

    if loop>(sideLength-1) and loop<= (sideLength-1)+sideLength: 
     print "*" + " "*(totalLength-2) + "*" 

    if (loop>=1) and (loop)<(sideLength-1): 
     print " "*(sideLength- 1- loop) + "*" + " " * ((sideLength-2) + 2*(loop)) + "*" + " "*(sideLength- 1- loop) 

    if loop>((totalLength//2) + (sideLength//2)) and loop<(totalLength-1): 
     print " "*(loop - 1 - sideLength) + "*" 

    loop+=1 

从这最后如果条件发生的问题。

+3

欢迎使用stackoverflow,而不是放置图像。请复制粘贴代码在这里。 –

+2

发布代码截图时,您希望我们重新键入整个代码。既然你想得到帮助,尽可能地尽可能地有帮助。这包括代码相关部分的文本副本,以及您收到的错误(或错误输出)。见[问]和[mcve]。 –

回答

0

要在任意长度> 1上工作,必须更改第二个if语句。我为你解决了最后一个问题:

sideLength = 5 
totalLength = (sideLength) + 2*(sideLength-1) 

loop = 1 

while loop<=totalLength : 
    if loop==1 or loop==totalLength: 
     print " "*(sideLength-1) + "*"* sideLength + " "*(sideLength-1) 

    if loop>sideLength-1 and loop<= 2*sideLength-1: 
     print "*" + " "*(totalLength-2) + "*" 

    if loop>=1 and loop<sideLength-1: 
     print " "*(sideLength- 1- loop) + "*" + " " * ((sideLength-2) + 2*(loop)) + "*" + " "*(sideLength- 1- loop) 

    if loop>=2*sideLength-1 and loop<totalLength-1: 
     print " "*(loop-totalLength+sideLength) + "*"+ " " *(totalLength-2*(loop-totalLength+sideLength+1)) + "*" + " "*(sideLength- 1- loop) 

    loop+=1 
+0

非常感谢。 :) –

+0

没问题。如果我的回答对您有帮助,请考虑将其投票并将其标记为已接受(我答案左侧的复选标记)。 –