带有排序数组的弗洛伊兹三角形(Python)

问题描述 投票:0回答:1

假设我有一个 [1,2,3,4,5,6] 的排序列表(尽管这个列表可能更大)

我想制作这样的弗洛伊德三角形:

1

23

456

使用这样的嵌套数组:[[1],[2,3],[4,5,6]]

我正在使用嵌套循环,但陷入困境。 我发现的大多数解决方案都需要一个大小作为三角形的输入,我认为在这种情况下这将是数字列表的长度?我不确定。

pyramid=[]
pyramid_line = [numbers[0]]

pyramid.append(pyramid_line)
print(pyramid)

size = len(numbers)

for i in range(1,size-1):

    pyramid_line=[]
    for j in range(1,i+1):
        pyramid_line.append(numbers[i])
        while len(pyramid_line) <= i:
            pyramid_line.append(numbers[i+1])
    
    pyramid.append(pyramid_line)
print(pyramid)

这给出了

的输出
[['1'], ['2', '3'], ['3', '4', '4', '3'], ['4', '5', '5', '5', '4', '4'], ['5', '6', '6', '6', '6', '5', '5', '5']]
python algorithm pyramid
1个回答
0
投票

在审查您当前的代码和所谓的不输入尺寸的要求时,以下是您的代码的重构版本,您可以将其用作深思熟虑。

user_input = list(input("Enter list: ").split(",")) 

valid = False

# Check that the list length is a proper size to create a triangle

for x in range(0,100):
    if ((x * x + x) / 2 == len(user_input)):
        valid = True
        break

if not valid:
    print("Improper number of elements to produce a triangle")
    exit(1)

x = 0
y = 1
master_list = []

while True:             # Build the nested inner list elements and append them into the master list
    inner_list = []
    for i in range(x, (x + y)):
        inner_list.append(user_input[i])
    x += y
    y += 1
    master_list.append(inner_list)

    if x >= len(user_input):
        break

print("Resulting list:", master_list)

for i in master_list:
    for j in i:
        print(j, end="")
    print(" \n")

此方法要求用户输入一个列表作为逗号分隔列表,然后检查该列表的大小是否合适以生成合适的三角形(例如,大小为 1、3、6、10、15 等)。

如果长度有效,则构建越来越大的嵌套列表,然后附加到主列表中。

以下是在终端进行的示例测试。

craig@Vera:~/Python_Programs/Floyd$ python3 Triangle.py 
Enter list: 1,2,3,4,5,6
Resulting list: [['1'], ['2', '3'], ['4', '5', '6']]
1 

23 

456 

正如我所说,值得深思。与往常一样,我建议参考 Python 教程文献,尤其是在本例中,因为它与列表有关。

© www.soinside.com 2019 - 2024. All rights reserved.