【问题标题】:How can I reverse an asterisk triangle in python如何在python中反转星号三角形
【发布时间】:2018-07-17 19:20:48
【问题描述】:

目前,我有一个输出星号三角形的代码,如下所示:

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

这是它的代码:

num = int(input("Enter the number of rows: "))
for i in range(1,num+1):
    for j in range(1,i+1):
        print("*",end=' ')
    print()

现在,我如何使用/修改上面的相同代码使三角形看起来像这样:

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

有什么建议吗?

【问题讨论】:

  • 此代码不会在此处生成三角形。我冒昧地纠正它
  • 你是....正确的。 o__o 让我快速解决这个问题。我在玩它。
  • @RafaelC 谢谢,这是我的一个非常疏忽的错误。对此感到抱歉。

标签: python for-loop


【解决方案1】:

使用字符串方法str.rjust

>>> num = int(input("Enter the number of rows: "))
>>> for i in range(1, num + 1):
...     print(" ".join("*" * i).rjust(num * 2 - 1))
Enter the number of rows: 5
        *
      * *
    * * *
  * * * *
* * * * *

【讨论】:

  • 你的回答让我吃惊。我一直使用 2 个循环和一个条件来解决这个问题。
【解决方案2】:

如果你想把它倒过来倒过来,你可以使用这个:

num = int(input("Enter the number of rows: "))

for i in range(1, num + 1):
for j in range(1, num + 1):
    if i > j:
        print(' ', end=' ')
    else:
        print('*', end=' ')
print()

【讨论】:

    【解决方案3】:

    这里有一个函数可以做到这一点:

    def tristar(n,rev=False):
        for i in range(1,n+1):
            if rev:
                s = ' ' * (n-i) + '*' * i
                print(s)
            else:
                s = '*' * i
                print(s)
    

    【讨论】:

    • 不是很明显,但是你调用了这个函数吗?
    【解决方案4】:

    如果您不允许使用rjust

    num = int(input("Enter the number of rows: "))
    for i in range(1, num + 1):
        for j in range(num, 0, -1):
            if j <= i:
                print('*', end=' ')
            else:
                print(' ', end=' ')
        print()
    

    或者:

    num = int(input("Enter the number of rows: "))
    for i in range(num, 0, -1):
        for j in range(1, num + 1):
            if i > j:
                print(' ', end=' ')
            else:
                print('*', end=' ')
        print()
    

    【讨论】:

      【解决方案5】:

      f-string 方法,因此是面向行布局的解决方案。如果每个字符之间的空格为 1,则代码成立,因此每一行的固定长度为 2*num-1

      num = int(input("Enter the number of rows: "))
      
      for i in range(1, num+1):
          print(f'{" ".join("*" * i):>{2*num-1}}')
      

      输出

      Enter the number of rows: 5
              *
            * *
          * * *
        * * * *
      * * * * *
      

      【讨论】:

        【解决方案6】:

        以下代码将打印一个倒三角形:

        for i in range(1,6):
            print("{:>5s}".format("*"*i))
        

        输出:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-26
          • 2014-12-08
          • 1970-01-01
          • 2019-02-27
          相关资源
          最近更新 更多