3 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
你可以循環(huán)100次,然后用除法和模數(shù)來(lái)確定你當(dāng)前的行和列,然后計(jì)算相應(yīng)的乘積。
for i in range(0, 100):
row = 1 + i // 10
col = 1 + i % 10
print(row * col, end="\t")
if col == 10:
print()

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
您可以在沒(méi)有任何顯式循環(huán)甚至關(guān)鍵字的情況下執(zhí)行此操作for。
>>> from operator import mul
>>> from functools import partial
>>>
>>> print("\n".join(map(lambda n: "".join(map("{:<3}".format, map(partial(mul, n), range(1,11)))), range(1,11))))
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
但它仍然是 O(n^2)。不管你怎么寫(xiě),你都需要計(jì)算并輸出 O(n^2) 的乘積。
不過(guò),最簡(jiǎn)單的解決方案是像您已經(jīng)擁有的那樣使用兩個(gè)循環(huán)。

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果其他函數(shù)可以為您執(zhí)行嵌套循環(huán),您可以使用itertools.product:
>>> from itertools import product
>>> for a, b in product(range(1, 11), repeat=2):
... print(a * b, end="\t")
... if b == 10:
... print()
...
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
添加回答
舉報(bào)