История изменений
Исправление vvn_black, (текущая версия) :
Во, вариант, даже должен работать, сам цикл с постусловием, универсальный:
def repeat_until(body, condition, *args, state=None, **kwargs):
state = body(state or dict())
if condition(state):
return repeat_until(body, condition, state=state)
return state
Решение с его помощью частной задачки - суммировать ввод из консоли, остановиться если введено отрицательное число:
def body(state):
c = int(input())
return {
'current': c,
'result': state.get('result', 0) + c
}
res = repeat_until(body, lambda x: x['current'] >= 0)
print(res['result])
Исправление vvn_black, :
Во, вариант, даже должен работать, сам цикл с постусловием, универсальный:
def repeat_until(body, condition, *args, **kwargs):
state = body(kwargs['state'] or dict())
if condition(state):
return repeat_until(body, condition, state=state)
return state
Решение с его помощью частной задачки - суммировать ввод из консоли, остановиться если введено отрицательное число:
def body(state):
c = int(input())
return {
'current': c,
'result': state.get('result', 0) + c
}
res = repeat_until(body, lambda x: x['current'] >= 0, state = None)
print(res['result])
Исходная версия vvn_black, :
Во, вариант, даже должен работать, сам цикл с постусловием, универсальный:
def repeat_until(body, condition, *args, **kwargs):
state = body(kwargs['state'] or dict())
if not condition(state):
return state
else:
return repeat_until(body, condition, state=state)
Решение с его помощью частной задачки - суммировать ввод из консоли, остановиться если введено отрицательное число:
def body(state):
c = int(input())
return {
'current': c,
'result': state.get('result', 0) + c
}
res = repeat_until(body, lambda x: x['current'] >= 0, state = None)
print(res['result])