У меня есть функция, которая принимает два входа и возвращает массив кортежей, где два числа в заданном кортеже имеют то же самое отношение, что и два числа, присвоенные этой функции!Почему моя функция не всегда возвращает правильный список?
Итак, все работает нормально, но по некоторым причинам в некоторых случаях он не набирает каждый кортеж. Вот пример, и я не знаю, почему:
In [52]: def find_r(num1,num2):
....: ratio = num1/float(num2)
....: ratio = 1/ratio
....: my_list = [(a,int(a * ratio)) for a in range(1,num1) if float(a * ratio).is_integer()] #and a * 1/float(ratio) + a <= num1]
....: return my_list
....:
In [53]: find_r(100,364)
Out[53]: [(75, 273)]
так он вернулся только один кортеж, но если вы разделите как 75 и 273 на 3, вы получите кортеж из 25 и 91, которые имеют одинаковое соотношение! Почему моя функция не подобрала этот экземпляр?
Если это помогает, я подозреваю, что это как-то связано с методом is_integer()
, но я не уверен.
Спасибо!
Это имеет смысл, но, к сожалению, я не могу проверить для эквивалентности фракций, потому что я делаю список на основе элементов, имеющих точно такой же пропорции. Мне просто нужно отсеять нецелые числа, что я и делаю, но, как вы указали, некоторые из целых чисел читают как float, что является моей проблемой. –
@RyanSaxe: Отношение - это доля. См. Мой отредактированный ответ для способа сделать это. – BrenBarn