#python
#python
Вопрос:
Я относительно новичок в Python, и я столкнулся с проблемой, приведенной ниже:
Учитывая два списка a и b и целое число n, проверьте,
а) все элементы a являются коэффициентом n
б) n является коэффициентом всех элементов b
Мой код не кажется правильным. Может кто-нибудь, пожалуйста, указать на ошибку здесь.
return n if n%x==0 for x in a and y%n==0 for y in b
Любая помощь приветствуется
Комментарии:
1. Вы ожидаете, что эта функция вернет
bool
значение, указывающее, выполнены оба условия или нет?2. Цикл For так не работает. Пожалуйста, опубликуйте полный код.
3.
return all(n % x == 0 for n in a) and all(y % n == 0 for y in b)
4. @Dev5 Приведенный выше комментарий от @Chris_Rands точен, если вы просто хотите
bool
вернуть. Вы могли бы использовать его решение вif
/else
дереве, если бы хотели сделать что-то вроде «ReturnFalse
/None
if не проходит, вернитеint
, если это произойдет`.5. @JPI93 хорошо, да, извините, мой вопрос был не совсем точным. Спасибо за дополнительную информацию 🙂
Ответ №1:
Очевидный (вы пропустили all(...)
):
all(n % x == 0 for x in a) and all(y % n == 0 for y in b)
Забавный:
0 == n % reduce(lcm, a) == reduce(gcd, b) % n
Однако требуется Python 3.9.
Тестовый код:
from itertools import product
from math import gcd, lcm
from functools import reduce
R = range(1, 11)
true = false = 0
for n in R:
for a in product(R, repeat=3):
for b in product(R, repeat=3):
expect = all(n % x == 0 for x in a) and all(y % n == 0 for y in b)
result = 0 == n % reduce(lcm, a) == reduce(gcd, b) % n
assert result == expect
true = expect
false = not expect
print(true, false)
=> Никаких сбоев, те же 2 723 истинных результата и 9 997 277 ложных результатов.