晚间!
我的目标是使用嵌套循环获得类似于上面显示的内容。我知道嵌套循环只是另一个循环。我知道我必须使用顶行和侧列的范围。但是,我不知道如何提取数学方程式来输出每个数字的因子。
这就是我所拥有的,而且我正在努力奋斗。
def main():
for num in range(10):
for row in range(9):
for col in range(9):
print(num, end=‘’)
print()
main()
答案 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个空格。
此外,这是一个很好的参考:
不幸的是,在Python中有三种单独的字符串格式化方式。坦率地说,f字符串正在迅速成为我的首选方式,我认为如果你不滥用它们会很好,因为它们可以采取任何表达式