繁体   English   中英

用python打印圣诞树

[英]Printing christmas tree in python

如何在python中制作完美的圣诞树? 我这里有我的代码,但它不能正常工作,它需要在第一个 for 循环中打印'~~'

height = 7
for a in range(1, (height + height) - 3):
    if a % 2 != 0:
        if a == 1:
            print(a * 'o')
        else:
            print(a * '* ')
for a in range(height + 1):
    if a % (height + 1) == 1:
        test = height - 3
        print(test * '~~' + a * '|' + test * '~~')
    if a % (height + 1) == 1:
        test = height - 3
        print(test * '~~' + a * '|' + test * '~~')

我的代码的输出是:

o
* * * 
* * * * * 
* * * * * * * 
* * * * * * * * * 
~~~~~~~~|~~~~~~~~
~~~~~~~~|~~~~~~~~

我想要的输出是:

~~~~~~~~o~~~~~~~~
~~~~~~* * *~~~~~~
~~~~* * * * *~~~~
~~* * * * * * *~~
* * * * * * * * *
~~~~~~~~|~~~~~~~~
~~~~~~~~|~~~~~~~~
def values():
    yield 'o'
    for i in range(3, 10, 2):
        yield ' '.join('*' * i)
    yield from '||'

for v in values():
    print('{:~^17}'.format(v))

印刷:

~~~~~~~~o~~~~~~~~
~~~~~~* * *~~~~~~
~~~~* * * * *~~~~
~~* * * * * * *~~
* * * * * * * * *
~~~~~~~~|~~~~~~~~
~~~~~~~~|~~~~~~~~

或者:

for v in ['o'] + [' '.join('*' * i) for i in range(3, 10, 2)] + ['|', '|']:
    print('{:~^17}'.format(v))

这是一个使用string方法center的示例。

for x in range(1, 30, 2):
    s = '*' * x
    print(s.center(30))

              *               
             ***              
            *****             
           *******            
          *********           
         ***********          
        *************         
       ***************        
      *****************       
     *******************      
    *********************     
   ***********************    
  *************************   
 ***************************  
***************************** 
>>>

编辑:包括波浪号。

limit = 30

for x in range(1, limit, 2):
    tildes = '~' * ((limit-x)//2)
    out = tildes + '*' * x + tildes
    print(out)

~~~~~~~~~~~~~~*~~~~~~~~~~~~~~
~~~~~~~~~~~~~***~~~~~~~~~~~~~
~~~~~~~~~~~~*****~~~~~~~~~~~~
~~~~~~~~~~~*******~~~~~~~~~~~
~~~~~~~~~~*********~~~~~~~~~~
~~~~~~~~~***********~~~~~~~~~
~~~~~~~~*************~~~~~~~~
~~~~~~~***************~~~~~~~
~~~~~~*****************~~~~~~
~~~~~*******************~~~~~
~~~~*********************~~~~
~~~***********************~~~
~~*************************~~
~***************************~
*****************************

我稍微编辑了您的代码:

height = 7
width = 17
for a in range(1, (height + height) - 3):
    if a % 2 != 0:
        if a == 1:
            sym = 'o'
            curly = ''.join(['~' for i in range((width-len(sym))//2)])
            print(curly +  a * sym + curly)
        else:
            sym = a * '* '
            curly = ''.join(['~' for i in range((width - len(sym)) // 2)])
            print(curly + sym + curly)
for a in range(height + 1):
    if a % (height + 1) == 1:
        test = height - 3
        print(test * '~~' + a * '|' + test * '~~')
    if a % (height + 1) == 1:
        test = height - 3
        print(test * '~~' + a * '|' + test * '~~')
~~~~~~~~o~~~~~~~~
~~~~~* * * ~~~~~
~~~* * * * * ~~~
~* * * * * * * ~
* * * * * * * * * 
~~~~~~~~|~~~~~~~~
~~~~~~~~|~~~~~~~~

它并不完美,但没有圣诞树是 100% 直的。

我稍微修改了你的代码,这里是代码:

height = 7
z = height - 3
x = 1
for i in range(1, (height + height) - 3):
    if i % 2 != 0:
       if(i==1):
          print('~~' * z + 'o' +'~~' * z)
       else:
          print('~~' * z + '* ' * (x-1)+ '*' *1 +'~~' * z)
       x+=2
       z-=1
for a in range(height + 1):
    if a % (height + 1) == 1:
       test = height - 3
       print(test * '~~' + a * '|' + test * '~~')
    if a % (height + 1) == 1:
       test = height - 3
       print(test * '~~' + a * '|' + test * '~~')

输出:

~~~~~~~~o~~~~~~~~
~~~~~~* * *~~~~~~
~~~~* * * * *~~~~
~~* * * * * * *~~
* * * * * * * * *
~~~~~~~~|~~~~~~~~
~~~~~~~~|~~~~~~~~

这是一个简单的编程问题。 因此,让我们创建一个简单的程序来解决它。

首先,我们需要绘制我们的树。 在每一行中,我们的树有奇数个开始用于显示树和一些~字符用于表示背景。 如果我们想要一棵树,它的高度等于height变量。 height th 行,我们不想有任何~字符。 但是在第一行中,我们希望只有一个*字符。

因此,让 for 循环从height计数到零并以某种方式将~字符的数量与其相关似乎是一个好主意。

我们先看代码:

for i in range(height, 0, -1):
    print("~" * (i - 1))    // repeating `~` character (i - 1) times

如果运行此代码,您将获得以下输出:

~~~~~~
~~~~~
~~~~
~~~
~~
~

现在让我们添加*字符来绘制树。 对于~ *字符,我们应该有完全相反的关系。

for i in range(height, 0, -1):
    print("~" * (i - 1), end="")
    print("*" * (((height - i) *2) + 1))

我们在上一个print函数的末尾添加end="" 因为print会在每次调用的末尾添加一个换行符,我们想阻止它(因为我们想在~字符后添加*字符)。

然后我们要在每一行添加*字符。 但是我们想将它们的数量计算为 1 到height * 2 但我们只需要奇数。 这就是我们在第二行所做的。 现在,我们每行有以下数量的*字符:1, 3, 5, 7,...

以下是该代码的输出(我们认为height = 7 ):

~~~~~~*
~~~~~***
~~~~*****
~~~*******
~~*********
~***********
*************

如您所见,现在我们有了圣诞树。 但是我们的背景是不完整的。 我们唯一应该做的就是重复我们的第一个print语句。 但是这次我们不应该添加end=""因为我们希望在每一行的末尾都有换行符。

for i in range(height, 0, -1):
    print("~" * (i - 1), end="")
    print("*" * (((height - i) *2) + 1), end="")
    print("~" * (i - 1))

现在我们的树完成了:

~~~~~~*~~~~~~
~~~~~***~~~~~
~~~~*****~~~~
~~~*******~~~
~~*********~~
~***********~
*************

您可以按照这种简单的方法向树中添加其他内容。 我希望这可以帮助你。

尝试使用更多条件来处理星数 (*)。 如果这不起作用,请在下面发表评论。

就像,你可以这样做:

如果 '1star' 这样做..: elif '2stars' 这样做..:

我会这样编码:

sky=8
tree=1
for i in range(0,5):
    if i==0:
        print(sky*'~'+tree*'o'+sky*'~')
    else:
        print(sky*'~'+tree*'*'+sky*'~')
    sky-=1
    tree+=2
sky=8
tree=1
for i in range(0,2):
    print(sky*'~'+tree*'|'+sky*'~')

我修改了圣诞树,使它看起来更薄。

这是我的代码:

var = 14
for i in range(1, var + 1):
    print(" " * (var - i) + "*" * i + "*" * (i - 1))

示例输出:

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




暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM