2015-10-16 55 views
4

我试图形成一个人选择的文字的数字。 我已经做了一个正方形,金字塔和平行四边形。以圆圈的形式打印文字

我被困住的地方是当我试着做一个圆圈。我的想法是使用for i in range (1, height/2)它打印文本(f.e. - )* i次。然后我想要另一个for循环打印完全相反,所以从height/2height,它应该首先打印height/2* text for每次for循环再次开始时,它应该少打印文本一次。

我不完全确定它是否会以某种方式看起来像一个圆圈。 我会给我的代码一个金字塔和一个圆圈。我知道,对于这个圈子,我仍然需要做一些与" "有关的事情,但由于我真的不知道如何让所有的东西都能正常工作,所以我还没有开始考虑我将如何需要空白该代码中的空格。

def print_pyramid(height): 
    text = raw_input("Please give in what your pyramid needs to be formed from, you can choose two **, two --, or two letters") 
    for i in range(1,height+1): 
     print (height-i+1)*" ", text * i 

def print_circle(height): 
    text = raw_input("Give in what your circle is made of: **, -- or two letters.") 
    for i in range(1,height/2): 
     print text*i 
    for j in range ((height/2)-1,(height/2)+1): 
     print text*j 
    for h in range((height/2)+2, height+1): 
     print text*((height/2)-h) 

Example of output, see link

+2

你能分享你的理想输出的例子吗? – Tgsmith61591

+0

我假设目前的缩进只是由于粘贴。请[编辑](http://stackoverflow.com/posts/33171682/edit)您的问题并正确缩进您的代码。 – That1Guy

+0

看到这个相关的问题:[用于绘制实心圆的快速算法](http://stackoverflow.com/questions/1201200/fast-algorithm-for-drawing-filled-circles) –

回答

2

这里有一个: 比如,你以线的两倍宽:

radius = ceil(sqrt(len(text)/(2*pi))) # calculate with 2 characters per "cell" 
for i in range(-radius, radius+1): 
    num = ceil(sqrt(radius**2 - i**2) * 2) 
    print("{:^{}}".format("".join(next(text_iter, ".") for _ in range(2*num)), 4*radius)) 

输出得到出现在屏幕上更圆(但实际上是oblated)圆(!)函数使用单个字符打印给定半径的圆。它使用毕达哥拉斯定理计算当前高度处的圆的半宽,并将其乘以xscale常数以将其转换为全角,其中缩放因子考虑到我的文本单元屏幕的宽度是宽度的两倍多;您可能需要为屏幕调整一下。使用str.center方法来简化每行的定位。在这个演示中,我开始打印半径= 4,因为较小的看起来很糟糕。:)

def text_circle(rad, ch='*'): 
    xscale = 4.2 

    #Maximum diameter, plus a little padding 
    width = 3 + int(0.5 + xscale * rad) 

    rad2 = rad ** 2 
    for y in range(-rad, rad + 1): 
     #Find width at this height 
     x = int(0.5 + xscale * (rad2 - y ** 2) ** 0.5) 
     s = ch * x 
     print s.center(width) 

for i in range(4, 15): 
    print i 
    text_circle(i, '@') 

输出

4 

    @@@@@@@@@@@  
    @@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@ 
    @@@@@@@@@@@  

5 

    @@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@  

6 

     @@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@  

7 

     @@@@@@@@@@@@@@@   
    @@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@   

8 

      @@@@@@@@@@@@@@@@   
     @@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@  
      @@@@@@@@@@@@@@@@   

9 

      @@@@@@@@@@@@@@@@@    
     @@@@@@@@@@@@@@@@@@@@@@@@   
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@   
      @@@@@@@@@@@@@@@@@    

10 

       @@@@@@@@@@@@@@@@@@    
      @@@@@@@@@@@@@@@@@@@@@@@@@   
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
      @@@@@@@@@@@@@@@@@@@@@@@@@   
       @@@@@@@@@@@@@@@@@@    

11 

       @@@@@@@@@@@@@@@@@@@    
      @@@@@@@@@@@@@@@@@@@@@@@@@@@   
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
      @@@@@@@@@@@@@@@@@@@@@@@@@@@   
       @@@@@@@@@@@@@@@@@@@    

12 

       @@@@@@@@@@@@@@@@@@@@     
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@    
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@    
       @@@@@@@@@@@@@@@@@@@@     

13 

        @@@@@@@@@@@@@@@@@@@@@     
       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@    
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    
       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@    
        @@@@@@@@@@@@@@@@@@@@@     

14 

        @@@@@@@@@@@@@@@@@@@@@@      
       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@     
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   
      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@    
       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@     
        @@@@@@@@@@@@@@@@@@@@@@      
4

的圆的面积是A =πR 2,这样就可以得到从字符数半径填充所述圆1)。半径为r的圆的方程为x 2 + y 2 = r 2。您可以使用它来推导(给定线的宽度的一半)x =√(r² - y²)。然后,只需使用一个循环迭代两次半径,然后使用format string来打印该行中居中文本的下几个字符。

from math import pi, sqrt, ceil 
text = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.""" 
radius = ceil(sqrt(len(text)/pi)) 
text_iter = iter(text) 

for i in range(-radius, radius+1): 
    num = ceil(sqrt(radius**2 - i**2)) 
    print("{:^{}}".format("".join(next(text_iter, ".") for _ in range(2*num)), 2*radius)) 

输出:

 Lorem ipsu  
    m dolor sit am  
    et, consectetur  
    adipiscing elit, s 
    ed do eiusmod tempor 
    incididunt ut labore 
et dolore magna aliqua 
. Ut enim ad minim venia 
m, quis nostrud exercita 
tion ullamco laboris nis 
i ut aliquip ex ea commo 
do consequat. Duis aute 
irure dolor in reprehend 
erit in voluptate velit 
esse cillum dolore eu fu 
giat nulla pariatur. Exc 
epteur sint occaecat c 
upidatat non proident, 
    sunt in culpa qui o 
    fficia deserunt mo 
    llit anim id est  
     laborum......  
     ..........  

注意文本如何具有作为半径必须是整数(因此ceil)被填充。当然,你可以通过设置text = ""


1)这是假设每个字符的宽度与它的高,这是不是真的做印刷只是.相同(或任何其他占位符)案子。我想你可以稍微调整一下公式,以绘制更少的行,每行更多的字符代替。

  Lorem ipsum dolor   
     sit amet, consectetur ad  
    ipiscing elit, sed do eiusmo  
    d tempor incididunt ut labore  
et dolore magna aliqua. Ut enim ad 
    minim veniam, quis nostrud exerci 
tation ullamco laboris nisi ut aliqu 
ip ex ea commodo consequat. Duis aut 
e irure dolor in reprehenderit in vo 
luptate velit esse cillum dolore eu 
fugiat nulla pariatur. Excepteur sin 
t occaecat cupidatat non proident, 
    sunt in culpa qui officia deserun 
    t mollit anim id est laborum.. 
    ............................  
     ........................  
     .................. 
+0

你为什么不在你的公式中使用x?这不应该是'ceil(sqrt(radius ** 2 - i ** 2))'吗?我错过了什么吗? – saulspatz

+0

@saulspatz你是对的,我错过了。现在更简单了。谢谢。 –