Форум » Логические выражения » ege15 №191 » Ответить

ege15 №191

s11kai: Здравствуйте, Константин Юрьевич. Хотелось получить алгоритм решения в питоне, через множества, но получилось только через массивы: [pre2] # ege15 №191 Q = [i for i in range(8,31)] P = [i for i in range(10,19)] A = set() k=0 for N in range(0,23): for R in range(0,9): if (P[R]%2 != 0)and(Q[N]%2 != 0 and P[R] == Q[N]): A.add(P[R]) k+=1 break print('A = ',A,'k = ',k) [/pre2] Подскажите, пожалуйста, алгоритм с помощью множеств Спасибо.

Ответов - 6

Поляков: s11kai пишет: Подскажите, пожалуйста, алгоритм с помощью множеств Например, так можно: [pre2] P = set( range(10, 18+1) ) Q = set( range(8, 30+1) ) PandQodd = [x for x in P & Q if x % 2 == 1] print( PandQodd )[/pre2]Но тут предварительно нужно получить формулу: Amin = P*Q.

s11kai: Спасибо, Константин Юрьевич. Красивый алгоритм, жаль только, что с помощью него не проверить, правильность формулы, полученной в ручном режиме. Видимо это тот случай, когда компьютер не является помощником - только ручки.

Поляков: s11kai пишет: Видимо это тот случай, когда компьютер не является помощником - только ручки. Можно так: [pre2] P = set( range(10, 18+1) ) Q = set( range(8, 30+1) ) U = set( range(1000) ) A = set( x for x in U if ((x in P) <= (x in (U-Q))) == False ) print( len( [x for x in A if x % 2 == 1] ) )[/pre2]Или вот так, если уж совсем "в лоб":[pre2] P = set( range(10, 18+1) ) Q = set( range(8, 30+1) ) U = set( range(1000) ) A = set() for x in U: if ((not x in A) <=((x in P) <= (x in (U-Q)))) == False: A.add(x) print( A ) print( len( [x for x in A if x % 2 == 1] ) )[/pre2]


s11kai: Константин Юрьевич, прошу прощения что отвлекаю вас, разрешите последний вопрос. Поигрался с кодом и не смог понять, если в формуле будет отрицание, а код почему-то не воспринимает not: PandQodd = [x for x in P & not Q if x % 2 == 1] Спасибо.

Поляков: s11kai пишет: Поигрался с кодом и не смог понять, если в формуле будет отрицание, а код почему-то не воспринимает not: PandQodd = [x for x in P & not Q if x % 2 == 1] А что такое NOT для множества? Это разница между универсальным множеством и данным множеством. Тогда нужно ввести универсальное множество. Но оно бесконечно, так как это множество всех целых чисел. Можно использовать частичное универсальное множество, которого достаточно для решения конкретной задачи. Например, так: [pre2] P = set( range(10, 18+1) ) Q = set( range(8, 30+1) ) U = set( range(1000) ) PandQodd = [x for x in (P & (U-Q)) if x % 2 == 1] print( PandQodd )[/pre2]

s11kai: Спасибо, Константин Юрьевич, за подробное погружение в теорию. Вот теперь уже можно будет и экспериментировать с этими "жуткими" множествами.



полная версия страницы