使用 for 循环创建圣诞树

新手上路,请多包涵

我正在尝试创建一个程序,您可以在其中输入一个数字,该程序会创建一个 + 的“christmastree”排列。例如,如果我输入数字 5,程序应该打印:

     +
   +++
  +++++
 +++++++
+++++++++

到目前为止我所拥有的是:

 def holidaybush(n):
    z=n-1
    x=1
    for i in range(0,n):
        for i in range(0,z):
            print('',end='')
        for i in range(0,x):
            print('+',end='')
        for i in range(0,z):
            print('',end='')
        x=x*2
        x=x-1
        z=z-1
        print()
holidaybush(5)

它并没有像我期望的那样工作,即使我经历了逻辑并且它似乎在我的脑海中工作。有什么帮助吗?我今天刚学了循环,所以我可能对它们一无所知。

原文由 Sam Procter 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 821
2 个回答

好的,你有两个问题。首先,当你去缩进时,你写:

 print('',end='')

在 python(和其他语言)中, '' 是一个空字符串。您应该使用 ' '

其次,您的 x 递增逻辑似乎是错误的。只需添加 2 每个循环都可以正常工作,使您的程序:

 def holidaybush(n):
    z=n-1
    x=1
    for i in range(0,n):
        for i in range(0,z):
            print(' ',end='')
        for i in range(0,x):
            print('+',end='')
        for i in range(0,z):
            print(' ',end='')
        x=x+2
        z=z-1
        print()
holidaybush(5)

您的代码可以通过以下方式变得更紧凑:

  • 使用中缀运算符,将 x=x+2 替换为 x+=2
  • range 自动从零开始,所以 range(0,z) 可以替换为 range(z)
  • 使用字符串乘法,将您的内部 for 循环替换为 ' ' * z

将这些结果应用于:

 def holidaybush(n):
    z = n - 1
    x = 1
    for i in range(n):
        print(' ' * z + '+' * x + ' ' * z)
        x+=2
        z-=1
holidaybush(5)

但您可能想坚持使用冗长的版本。

原文由 matsjoyce 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 string.center() ,只是为了添加另一个解决方案,这使代码更紧凑:

 def holidaybush(n):
    for i in range(n):
        print(("+" * (i * 2 + 1)).center(n * 2 - 1))

holidaybush(5)

原文由 Strap 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题