使用for循环创建圣诞节

2024-05-23 14:00:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个程序,在其中输入一个数字,程序将创建一个“+”的“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)

它并不像我所期望的那样工作,即使我经过逻辑,它似乎在我的头脑中工作。有什么帮助吗?我今天刚学会了循环,所以我可能不知道关于它们的一切。


Tags: in程序fordefrange数字逻辑end
3条回答

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

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

holidaybush(5)

这个怎么样:

def holidaybush(n):
    for i in range(n):
        print ' ' * (n - (i + 1)),'+' * (2*i+1)

holidaybush(5)

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

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)
  • 使用字符串乘法,用' ' * z替换内部的for循环

将这些结果应用于:

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

但你可能想坚持冗长的版本。

相关问题 更多 >