【问题标题】:Printing text in form of circle以圆形形式打印文本
【发布时间】:2015-10-16 13:25:39
【问题描述】:

我正在尝试形成一个人选择的文本的图形。 我已经做了一个正方形、金字塔和一个平行四边形。

当我试图做一个圆圈时,我会遇到困难。我的想法是使用 for i in range (1, height/2) 来打印文本 (f.e. --) * i 次。然后我想要另一个 for 循环来打印完全相反的内容,所以从 height/2height,它应该首先打印 height/2* 文本,每次 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

【问题讨论】:

  • 你能分享一个你理想输出的例子吗?
  • 我假设当前的缩进仅仅是由于粘贴。请edit您的问题并正确缩进您的代码。
  • 编辑了我的帖子以修复身份并发布输出示例。如果我的代码/问题无法理解,我很抱歉,这可能是因为我在编程方面还很陌生。看了那个相关的问题,但我很难理解那里所说的内容。

标签: python


【解决方案1】:

圆的面积是A = π r²,所以你可以从填充圆的字符数得到半径1)。半径为r的圆的方程为x² + y² = r²。您可以使用它来导出(一半)给定线的宽度为 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) 这是假设每个字符的宽度和高度一样,但事实并非如此。我想您可以稍微调整一下公式以绘制更少的行,而每行有更多的字符。 例如,通过将线条加倍宽,您会得到一个在屏幕上看起来更圆(!)的圆圈(但实际上是扁平的)。:

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))

输出:

         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..   
    ............................    
      ........................      
         ..................  

【讨论】:

  • 你为什么不在你的公式中平方 x?这不应该是ceil(sqrt(radius**2 - i**2))吗?我错过了什么吗?
  • @saulspatz 你说的完全正确,我错过了。现在简单多了。谢谢。
【解决方案2】:

这是一个使用单个字符打印给定半径的圆的函数。它使用毕达哥拉斯定理来计算圆在当前高度的半宽,并将其乘以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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多