对于我的编程类,我必须创建一个程序,创建一个“金字塔”(在IDLE中),如下所示:
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
它会2**(row)
row = 0
(最初)。它用于for
循环。
它引发了一个问题,即n
的值大于5时输出不会如预期那样出现。
到目前为止,这是我的代码:
def pyramid(n):
rows, num, x, numbers, space_length, i_length = 0, '', 0, {}, 0, 0
for rows in range(n):
x = int(len(num) / 2)
y = str(2**rows) + ' '
num = num[0:x + 1] + y + num[x - 1 :]
numbers[rows + 1] = num
space_length = int(len(numbers[n]) / 2)
for i in numbers:
i_length = int(space_length - (len(numbers[i]) / 2))
numbers[i] = (' ' * i_length) + numbers[i]
print(numbers[i])
def main(): #I have to use the function of main() because my teacher requires it.
n = int(input("Enter an integer greater than 0: "))
if type(n) != int or n <= 0:
raise TypeError("N must be an integer greater than 0.")
pyramid(n)
main()
这是我得到的输出:
>>>
Enter an integer greater than 0: 10
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 1632 16 8 4 2 1
1 2 4 8 1632 64 2 16 8 4 2 1 #The 2 should be 32; space between 16 and 32.
1 2 4 8 1632 64128 64 2 16 8 4 2 1 #Same thing again; spacing messes up.
1 2 4 8 1632 64128256 28 64 2 16 8 4 2 1
1 2 4 8 1632 64128256512 56 28 64 2 16 8 4 2 1
如果有人可以帮我解决这个问题,那就太好了。谢谢!
答案 0 :(得分:1)
这是你在找什么?
def pyramid(n):
rows, num, x, numbers, space_length, i_length = 0, '', 0, {}, 0, 0
for rows in range(n):
x = int(len(num) / 2)
y = str(2**rows) + ' '
num = num[0:x + 2:] + y + num[x - 1:]
numbers[rows + 1] = num
space_length = int(len(numbers[n]) / 2)
for i in numbers:
i_length = int(space_length - (len(numbers[i]) / 2))
numbers[i] = (' ' * i_length) + numbers[i]
print(numbers[i])
def main(): #I have to use the function of main() because my teacher requires it.
n = int(input("Enter an integer greater than 0: "))
if type(n) != int or n <= 0:
raise TypeError("N must be an integer greater than 0.")
pyramid(n)
main()
输出:
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 16 32 6 8 4 2 1
1 2 4 8 16 32 64 32 6 8 4 2 1
1 2 4 8 16 32 64 128 4 32 6 8 4 2 1
1 2 4 8 16 32 64 128 256 28 4 32 6 8 4 2 1
1 2 4 8 16 32 64 128 256 512 56 28 4 32 6 8 4 2 1
答案 1 :(得分:1)
下面显示的代码适用于我测试的n值(1到20)。请注意,在Python 2.7及更高版本中,格式'{:{}}'
表示打印两个项目,第一个是要打印的值,第二个是打印它的字段宽度。(2.6可能需要字段编号,例如{{1我没有测试过。)表达式'{0:{1}}'
用于生成序列,如1 2 4 2 1和1 2 4 8 16 32 64 128 64 32 16 8 4 2 1计数,然后退后,退下。数组f保存对应于表中最大数字的字段宽度,即底线中的数字。 2**min(x, 2*i-x)
是行中打印的第一个数字之前的字段宽度的总和。请注意,sum(f[:n-i])
表单打印一个分隔空格,不会前进到新行。代码后显示了一些示例输出。
print ... ,
n = 15的示例输出:
def pyramid(n):
f = [1+len(str(2**min(i, 2*n-i-2))) for i in range(1+2*n)]
for i in range(n):
for x, w in zip(range(1+2*i), [sum(f[:n-i])]+f[n-i:]):
print '{:{}}'.format(2**min(x, 2*i-x), w-1),
print
pyramid(5)
pyramid(10)
for i in range(21):
pyramid(i)
编辑:以下是程序的稍长版本,引入了中间变量和两个函数以提高可读性。
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 16 32 16 8 4 2 1
1 2 4 8 16 32 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 512 256 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 512 1024 512 256 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 512 1024 2048 1024 512 256 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 2048 1024 512 256 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1
答案 2 :(得分:0)
错误是,你需要为每个循环清除字符串“num”,并为字符串注入清除错误的结束位置
并建议使用list for string concact
a = [1, 2, 4, 2, 1]
s = ' '.join([str(x) for x in a])