Python - 嵌套循环乘法矩阵

时间:2017-09-24 02:17:07

标签: python loops matrix nested

enter image description here

晚间!

我的目标是使用嵌套循环获得类似于上面显示的内容。我知道嵌套循环只是另一个循环。我知道我必须使用顶行和侧列的范围。但是,我不知道如何提取数学方程式来输出每个数字的因子。

这就是我所拥有的,而且我正在努力奋斗。

def main():
  for num in range(10):
    for row in range(9):
        for col in range(9):
            print(num, end=‘’)
    print()
main()

2 个答案:

答案 0 :(得分:0)

我建议分两步执行此操作(更清楚)。首先,生成2D矩阵,然后打印它。要生成矩阵,您可以使用nested list comprehension

>>> M = [[row*col for col in range(1,10)] for row in range(1,10)]

这相当于双for循环,但它更容易,因为您不必初始化矩阵M。这些在Python中无处不在,所以快速习惯它们!这很容易理解。例如,

>>> [i for i in range(1,10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

这是内循环正在做的事情,但随后它将这些值乘以外行每行的row值。

然后打印,只需循环遍历矩阵中的行,并将join行放在一起。如果您使用的是Python 3.6+,则可以使用f-strings (*literal string interpolation)进行打印:

>>> for row in M:
...     print(''.join([f'{val:>4}' for val in row]))

如果您使用的是旧版本的Python,请使用字符串格式:

>>> for row in M:
...     print(''.join(['{val:>4}'.format(val=val) for val in row]))

在这两种情况下,:>4表示使用固定宽度的字符串,右对齐4,其中>表示右对齐,4是固定宽度。这些都导致:

   1   2   3   4   5   6   7   8   9
   2   4   6   8  10  12  14  16  18
   3   6   9  12  15  18  21  24  27
   4   8  12  16  20  24  28  32  36
   5  10  15  20  25  30  35  40  45
   6  12  18  24  30  36  42  48  54
   7  14  21  28  35  42  49  56  63
   8  16  24  32  40  48  56  64  72
   9  18  27  36  45  54  63  72  81

但要一步完成,不存储矩阵M,你可以这样做:

print('\n'.join([''.join([f'{row*col:>4}' for col in range(1,10)]) for row in range(1,10)]))

请注意,此处join将字符串连接在一起。因此,在内部循环中,它将所有数字row*col与行内每列的固定宽度右对齐表示连接在一起,然后将每行与新行分隔符连接在一起。< / p>

答案 1 :(得分:0)

等式是一个简单的产品x*y,注意,range迭代已经的数值范围,您不需要num

>>> for i in range(1, 10):
...     for j in range(1, 10):
...         product = i*j
...         print(f"{product:>3}", end='')
...     print() # just prints a newline
...
  1  2  3  4  5  6  7  8  9
  2  4  6  8 10 12 14 16 18
  3  6  9 12 15 18 21 24 27
  4  8 12 16 20 24 28 32 36
  5 10 15 20 25 30 35 40 45
  6 12 18 24 30 36 42 48 54
  7 14 21 28 35 42 49 56 63
  8 16 24 32 40 48 56 64 72
  9 18 27 36 45 54 63 72 81

我使用f-strings,这是Python 3.6中提供的一个很好的新功能

有关我使用的格式规范{var:>3},请参阅docs,它将字符串右对齐3个空格。

此外,这是一个很好的参考:

https://pyformat.info/

不幸的是,在Python中有三种单独的字符串格式化方式。坦率地说,f字符串正在迅速成为我的首选方式,我认为如果你不滥用它们会很好,因为它们可以采取任何表达式