我花時間研究一個簡單的 python 函式,該函式允許列印二進制方形圖案。下面是代碼。
def print_binary_square(n):
i = 0
odd = True
while(i<n):
j=0
while(j<n):
if(odd):
if (j % 2 == 0):
print(0, end='')
else:
print(1,end='')
j = 1
else:
j = 1
if (j % 2 == 0):
print(0, end='')
else:
print(1,end='')
odd = not odd
i = 1
print()
如您所見,該函式接受一個引數。它將以方形模式列印二進制數。每行以 0 表示奇數行或 1 表示偶數行 上面的代碼有效,但我想知道是否可以改進代碼,因為嵌套的 if-else 對我來說似乎是多余的。
提前致謝!
uj5u.com熱心網友回復:
如果您將輸出視為零索引矩陣,您可以注意到,(i, j)只要i j是偶數,就會在索引處出現零。使用此觀察,您可以撰寫以下內容。它更短但不一定更清晰。
n = 5
result = "\n".join(
"".join("0" if (i j) % 2 == 0 else "1" for i in range(n))
for j in range(n)
)
uj5u.com熱心網友回復:
這是使用itertools和生成器的解決方案。生成器,itertools.cycle無需計數即可輕松重復操作。這里唯一的技巧是在每行浪費一個元素,以防 n 是偶數(因為最后一個數字重復)。
from itertools import cycle, islice
c = cycle(['0','1'])
n = 6
print('\n'.join(''.join(islice(c, n 1-n%2))[:n]
for _ in range(n)))
輸出:
010101
101010
010101
101010
010101
101010
只需更改輸入,就可以很容易地進行泛化:
from itertools import cycle, islice
def pattern(l, n):
c = cycle(l)
r = 1-n%len(l)
print ('\n'.join(''.join(islice(c, n r))[:n]
for _ in range(n)))
例子:
>>> pattern(list('012'), 5)
0120
1201
2012
0120
1201
>>> pattern(list('01234'), 7)
012340
123401
234012
340123
401234
012340
123401
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/415089.html
標籤:
上一篇:在python中運行多個執行函式給出錯誤“未讀結果”,如何在python中運行兩個或多個mysql陳述句?
下一篇:用于選擇特定行的Python輸入
