使用for循环创建圣诞树

3
我将尝试创建一个程序,您可以输入一个数字,该程序会创建一个“圣诞树”形状的+号排列。例如,如果我输入数字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)

虽然我按照逻辑思考,但它并没有像我预期的那样工作。有什么帮助吗?今天我刚学习了for循环,所以可能并不知道所有相关内容。


什么语言?你会得到什么? - Jongware
这看起来像一些无效的JS代码... - Ian Hazzard
1
@Godisgood 不是,看起来很像Python3,所以我已经重新标记了它,一旦通过审核... - matsjoyce
@ mastjoyce。是的,我认为你是对的。 - Ian Hazzard
11个回答

4
您可以使用 string.center(),这只是另一种解决方案,它可以使代码更加简洁:
def holidaybush(n):
    for i in range(n):
        print(("+" * (i * 2 + 1)).center(n * 2 - 1))

holidaybush(5)

3

好的,您有两个问题。首先,在进行缩进时,您写入:

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)

但您可能希望继续使用冗长的版本。


感谢您的帮助。 这个程序的技巧在于我不被允许乘以字符串,因为那会使它变得太容易了。错过了空格显然是愚蠢的。 感谢您帮忙使其更紧凑。 我还没学会这些快捷方式。 它起作用了!谢谢 - Sam Procter

3
这个怎么样:
def holidaybush(n):
    for i in range(n):
        print ' ' * (n - (i + 1)),'+' * (2*i+1)

holidaybush(5)

1

我的一行解决方案。

def holiday_bush(x):
    print("\n".join([f"{'+'*(2* n + 1):^{2*x+1}}" for n in range(x)]))

结果:

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

如果您还想在基座上安装一个主干线:
def holiday_bush(x):
    print("\n".join([f"{'+'*(2* n + 1):^{2*x+1}}" for n in (*range(x), 0, 0)]))

结果:

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

1
这是绘制圣诞树的最简单代码:
for i in range(1,20,2):
    print(('*'*i).center(20))

for leg in range(3):
    print(('||').center(20))

print(('\====/').center(20))

0
如果你把 'x+=2' 改成 'x+=1',你会得到正确的形状,但不会有那么多 '+',而且宽度也不会那么大。
def holidaybush(n):
z = n 
x =1

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


holidaybush(5)

0
while True:
    size = int(input("Enter the number of rows for the tree:"))
    last_row = (2 * size) - 1
    for i in range(1, size + 1):
        print(((" ") * (size - i)) + (("*") * ((2 * i) - 1)))

我为这个树程序想出了这段代码。


2
简洁易懂是可以接受的,但更详细的解释更好。 - Aposhian

0

我们也可以不用任何数字,只是为了好玩

n = int(input("有多大?\t"))
for i in range(n):
    for j in range(n-i):
        print(' ', end='')
    print('\b', end='') #作弊
    for k in range(i+n-j):
        print('*', end='')
    print('')

0
number = -1
Range = int(input("how many layers do you want the tree?"))
for x in range(0,Range):
    number = number + 2
    print(" " * (Range - x), "+" * number)

这对我有用。


0

`

a=7
n=7
for i in range(7):
  print(" "*a,end="")
  print("*"*(2*i+1))
  a-=1
for b in range (n//2):
  print("     *****")

尝试使用 for 循环打印树的简单代码


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接