我正在尝试编写一个代码,以给定的输入来绘制领结。

一个领结:

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


我在这里研究2种方法。谁能告诉我我走的路正确吗?我似乎迷路了...

num = int(input("Enter an odd number greater than 4: "))

row = 1
row_space = row*2-1
space_tot = num*2 - row_space*2
stars = int((num*2 - space_tot)/2)

space = ""

for x in range(num):
    print("*"*stars+" "*space_tot+"*"*stars)
    row += 1
    space_tot -= 2


def triangle(n):
   for x in range(n,0,2):
        print ('*'*x)
   for x in range(n,0,-2):
        print ('*'*x)
        n -= 1


triangle(num)

最佳答案

num = int(input("Enter an odd number greater than 4: "))
center = (num - 1)//2
for row in range(num):
    nspaces = 2*abs(row - center)
    nstars = num - nspaces
    print nstars*'*' + 2*nspaces*' ' + nstars*'*'


怎么运行的

让我们看一下案例num=5的期望输出(添加行号):

0 *        *
1 ***    ***
2 **********
3 ***    ***
4 *        *


让我们将其视为左半部分和右半部分。观察每一半在中间行都有num个星。中间行的空格数为零。从中心移开的每一行,每一半的空间数量增加两个。用数学表示:

nspaces = 2*abs(row - center)


每半是num列宽。因此,如果一半有nspaces个空格,那么该半个中的星数为:

nstars = num - nspaces


计算完这两个之后,只需打印全部内容即可:

print nstars*'*' + 2*nspaces*' ' + nstars*'*'


每行一次。

关于python - 用Python迭代绘制“领结”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25696309/

10-13 06:56