Помогите, пожалуйста. Уже жду неделю. Python
def firi(param1, param2, func, check):
if isinstance(param1, int) and isinstance(param2, int):
# Если оба параметра - числа
for i in range(param1, param2):
if eval(str(check)):
exec(str(func))
else:
if isinstance(param1, int):
# Если первый параметр - число, а второй - промежуток для цикла
for i in range(param2):
if eval(str(check)):
exec(str(func))
else:
# Если первый параметр - переменная, а второй - число
if eval(str(check)):
exec(str(func))
j=5
firi(j, 10, 'print(j)', 2+2==4)
Сейчас выводит 5 пятёрок, а может кто помочь, чтобы выводило от 5 до 9? Но, чтобы осталась такая запись:
firi(j, 10, 'print(j)', 2+2==4)
Ответы (2 шт):
Автор решения: Dark Space
→ Ссылка
Ваш комментарий очень прояснил ситуацию. Нельзя ли обойтись таким вариантом?
def foo(a, b, func, check):
for j in range(a, b):
if check:
exec(func)
foo(5, 10, 'print(j)', 2 + 2 == 4)
Единственный минус, который на данный момент я вижу, это то, что имя переменной j должно совпадать в print(j) и цикле for
P.S. exec нужно использовать аккуратно, и не применять его к коду, который приходит откуда-то извне
Автор решения: CrazyElf
→ Ссылка
Используйте в качестве параметра func анонимную функцию lambda, тогда и exec не нужен:
def firi(param1, param2, func, check):
...
for i in range(param1, param2):
if eval(str(check)):
func(i)
...
firi(j, 10, lambda x: print(x), 2+2==4)
Да и check у вас сейчас просто True, я бы его тоже на какую-нибудь lambda поменял.