【问题标题】:Python:Christmas TreePython:圣诞树
【发布时间】:2015-12-12 14:30:10
【问题描述】:

我需要打印一棵看起来像这样的圣诞树:

  /\  
 /  \
/    \

到目前为止,这是我的代码:

for count in range (0,20):
    variable1 = count-20
    variable2 = count*2

print('{0:{width1}}{1:{width2}}' .format('/','\\', width1=variable1 , width2=variable2))

我正在使用 Python 3.5。并且编码说在字符串格式说明符中不允许符号

【问题讨论】:

  • 我认为你需要使用variable1等而不是硬代码20
  • 什么意思?你的意思是我不应该使用宽度?
  • 还有variable1 = count - 20,不带引号等
  • 你说width1=20,应该是width1=variable1
  • 它说说明符无效

标签: python python-3.x


【解决方案1】:
import builtins
builtins.unicode = str
print ('                  ',chr(0x2605))
for count in range (20):
    print ('{0:>{width1}}{1:>{width2}}' .format('/','\\', width1 = 20-count , width2 = 2*count+1))
print ('-----------------------------------------'
print ('                 [      ]                ')
print ('                 [      ]                ')
print ('                 [      ]                ')
print ('                 [      ]                ')
print ('                 [      ]                ')
print ('-----------------------------------------')

感谢帮助我完成的人!

【讨论】:

    【解决方案2】:

    如果您可以使用不同的方法,这个方法使用生成器和字符串连接

    n=10
    print('\n'.join(' '*(n-i)+'/'+' '*2*i+'\\' for i in range(n)))
    

    生产

              /\
             /  \
            /    \
           /      \
          /        \
         /          \
        /            \
       /              \
      /                \
     /                  \
    

    或者,正如@zvone 建议的那样,为什么不添加一些随机装饰?

    print('\n'.join(' '*(n-i)+'/'+''.join(random.choice(' # *') for _ in range(2*i))+'\\' for i in range(n)))
    

    产生更漂亮的结果(甚至部分被 SO 的语法解析器点亮)

              /\
             /*#\
            / ###\
           /* #  #\
          /#  ***  \
         /*#  # ##  \
        /   #* * * # \
       /##  **##   *#*\
      /    *  # #  ## #\
     /*# ## *#   * * #* \
    

    圣诞快乐!!!

    :)

    【讨论】:

    • 为什么不添加一些随机装饰? print('\n'.join(' '*(n-i)+'/'+''.join(random.choice(' # *') for _ in range(2*i))+'\\' for i in range(n)))圣诞快乐 :)
    • @zvone 哈哈哈,gr8!我已将其添加到我简单而基本的答案中。赞! :)
    【解决方案3】:

    以下适用于 Python 3.4,我假设它也适用于 Python 3.5。

        for count in range (20):
            print('{0:>{width1}}{1:>{width2}}' .format('/','\\', width1=20-count , width2=2*count+1))
    

    导入部分 - 正如其他人在 cmets 中提到的 - 不使用固定宽度进行格式化。

    请注意右对齐所需的“>”对齐字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 2014-01-13
      • 2021-12-22
      • 1970-01-01
      • 2015-08-23
      相关资源
      最近更新 更多