在python中使用for循环格式化数字列表

时间:2015-10-15 03:48:39

标签: python loops nested-loops

所以我做了一个家庭作业,我遇到了一些麻烦。

我们应该使用嵌套for循环以各种不同的方式显示一组数字。我需要以下4种模式中的3种,我只知道如何制作1。

模式A

1 

1  2

1  2  3

1  2  3  4

1  2  3  4  5

模式B

1  2  3  4  5

1  2  3  4

1  2  3

1  2

1

模式C

            1

         2  1

      3  2  1

    4  3  2  1

5  4  3  2  1

模式D

1  2  3  4  5

    1  2  3  4

        1  2  3

            1  2

                1

(我不知道为什么C和D不能正确显示,但你应该有这个想法)

我已经获得了以下代码来制作模式A:

for x in range(5):
    for y in range(1, x + 2):
        print(y, end = '\r')
    print()

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

您可以使用" " * y

创建填充

另一种方法是迭代所有25个点并选择在每个位置打印空格或数字

for y in range(1, 6):
    for x in range(1, 6):
        print(" " if x > y else x, end=" ")
    print()

注意如果将x > (6 - y)替换为比较

会发生什么

也尝试颠倒范围。例如

 for y in reversed(range(1, 6)):

答案 1 :(得分:0)

你认为C和D部分有什么变化?数字会随着第一个数字之间的初始空间而变化,对吗?这意味着您需要跟踪循环中的空格数。对于A和B,如果您可以将算法拼凑为1,则可以执行另一个算法。提示:每种模式的起始起点是什么?它是如何变化的?

答案 2 :(得分:0)

由于您使用的是Python 3的print()函数,因此您可以使用range运算符解包*个对象,并利用print()方便的sepend个参数:

模式A:

for i in range(5):
    print(*range(1, i+2), sep='  ', end='\n\n')

模式B:

for i in range(5, 0, -1):
    print(*range(1, i+1), sep='  ', end='\n\n')

模式C:

for i in range(5):
    print('   '*(4-i), end='')
    print(*range(i+1, 0, -1), sep='  ', end='\n\n')

模式D:

for i in range(5, 0, -1):
    print('   '*(5-i), end='')
    print(*range(1, i+1), sep='  ', end='\n\n')