Я получил функцию:Изменить функцию использовать список comprehision в Python
def euler9():
for b in range(1, 500):
a = (500000 - 1000 * b)/(1000 - b)
if a % 1 == 0:
print(b * a * (1000 - a - b))
И я хочу сделать это в одной строке, как
x*x for x in range(1,1)
Это то, что я сделал:
def euler9():
print([b * a * (1000 - a - b) for b in range(1, 500) for a in (500000 - 1000 * b)/(1000 - b) if a % 1 == 0])
но я не знаю, что я делаю неправильно. У меня есть ошибка: ТипError: объект «float» is not itable
Похоже, вы пытаетесь увидеть ли '1000 - b' делит '500000 - 1000 * b'. Если это так, вы должны проверить, является ли '(500000 - 1000 * b)% (1000 - b) == 0', вместо того, чтобы выполнять деление с плавающей запятой и проверять, имеет ли результат дробную часть. Операции с плавающей точкой включают ошибку округления, которую вы не должны подвергать действию чисто целочисленной операции. – user2357112
Это выглядит намного хуже в понимании списка, и оно будет менее эффективным, так как вам придется вычислять одни и те же вещи дважды. – ayhan