【问题标题】:What is wrong with this code to print a pattern of spaces and asterisks?这段代码打印空格和星号模式有什么问题?
【发布时间】:2021-12-03 04:41:58
【问题描述】:

我想打印下面的图案

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

我的代码:

for row in range(1,6):
      print(' ' * (5-row) + row * '*')

上面的代码给了我预期的输出,但没有在每个*之后添加空格

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

当我尝试添加空格时,它打印为金字塔,这不是预期的输出 任何建议

print(' ' * (5-row) + row * '* ')  -> space added after `'*  '` 

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

【问题讨论】:

  • “当我尝试添加空格时,它打印为金字塔,预计不会输出任何建议”好吧,用你自己的话来说,这个结果到底有什么问题?比如,就空格和星号的数量而言?第一行的星号之前应该出现多少个空格?出现了多少?
  • 请注意,[design-patterns] 标签,以及一般的“设计模式”的概念,与在命令行中使用文本绘制模式无关 .

标签: python


【解决方案1】:

你只需要增加padding的大小;尝试以下方法:

for row in range(1, 6):
    print(' ' * (5 - row) * 2 + row * '* ')
#         *
#       * *
#     * * *
#   * * * *
# * * * * *

或者,您可以将 f-string 与 join 一起使用:

for i in range(1, 6):
    print(f"{' '.join('*' * i):>9}")
#         *
#       * *
#     * * *
#   * * * *
# * * * * *

【讨论】:

    【解决方案2】:

    首先打印n-i 的空格,然后打印i 所需的字符次数,其中i 是从1n 的单个数字。您可以在函数中实现代码,使其适用于n 的任何值:

    def printPattern(n=5):
        for i in range(1, n + 1):
            print('  ' * (n - i) + '* ' * i)
    

    输出:对于n的不同值:

    >>> printPattern(2)
      * 
    * *  
    >>> printPattern() # default n is 5
            * 
          * * 
        * * * 
      * * * * 
    * * * * * 
    >>> printPattern(10)
                      * 
                    * * 
                  * * * 
                * * * * 
              * * * * * 
            * * * * * * 
          * * * * * * * 
        * * * * * * * * 
      * * * * * * * * * 
    * * * * * * * * * * 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-25
      • 2018-09-09
      相关资源
      最近更新 更多