假设我有一个 [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']]
在审查您当前的代码和所谓的不输入尺寸的要求时,以下是您的代码的重构版本,您可以将其用作深思熟虑。
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 教程文献,尤其是在本例中,因为它与列表有关。