🐙
[Python] 回数制限かつ条件付きループあれこれ
はじめに
Pythonで条件を満たすまでループさせるのだけど回数制限も必要なループを書く場合のアイディア。
簡単にかけるのだけど、もっと良いものがないかと結構モヤモヤするので、整理のためにちょっとまとめてみる。
コード
回数制限かつ条件付きループ
f1
の方は、すっきりと書けるけど、ループの条件にconditionがかかわっているのが分かりづらいかも。
python
import random
import itertools
import functools
def getCondition():
return True if random.random() > 0.5 else False
def f1(times):
for i in range(times):
condition = getCondition()
if condition:
break
print(i, condition)
f1(10)
f2
の方は、ループの条件が分かりやすいが、変数の初期化とインクリメントが必要。
def f2(times):
i = 0
condition = getCondition()
while not condition and i < times:
condition = getCondition()
i += 1
print(i, condition)
f2(10)
デコレータ
何かに役に立つかも。
def repeat(times):
def _repeat(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
for i in range(times):
result = func(*args, **kwargs)
if result:
return [i, result]
return [i, result]
return wrapper
return _repeat
ret = repeat(3)(getCondition)()
print(ret)
Discussion