おそらく非合理ですが、ループ内のカウンタが嫌いです。この特定の例では過度の過労ですが、ミックスにジェネレータを埋め込むことを考えましたか?これは、より複雑な状況のために便利なパターンです:
def print_newline_after_x_iterations(my_range, x):
i = my_range.__iter__()
while True:
try:
for _ in range(x):
yield next(i)
print()
except StopIteration:
break
def main2():
for num in print_newline_after_x_iterations(range(960, 0, -40), x=6):
print(num, end=' ')
出力:
>>> main2()
960 920 880 840 800 760
720 680 640 600 560 520
480 440 400 360 320 280
240 200 160 120 80 40
あるいはコルーチンベースのバージョンを使用します。
def coroutine(f):
def wrap(*args, **kwargs):
x = f(*args, **kwargs)
next(x)
return x
return wrap
@coroutine
def printer():
while True:
msg, end = yield
print(str(msg), end=end)
@coroutine
def columnator(columns=6, outputer=printer):
p = printer()
try:
while True:
for _ in range(columns):
p.send(((yield), " "))
p.send(("", "\n"))
except GeneratorExit as err:
p.send(("", "\n"))
def main3():
s = columnator(6, outputer=printer)
for num in range(960, 0, -40):
s.send(num)
s.close()
出力:
>>> main3()
960 920 880 840 800 760
720 680 640 600 560 520
480 440 400 360 320 280
240 200 160 120 80 40
を
ありがとう出力!私は、私の教科書がそれに焦点を当てたので、配当計算を使う必要があると感じました。私は戻って、その近くを勉強します。 :) –
ええ、配当演算子を使ってより大きいデータを扱うときに、より速い応答が必要な場合は余分なヘッドです。 「時間」を使用してループでプログラムを1000回実行し、被除数の有無にかかわらずパフォーマンスの違いを確認します。 –