Проблема с условием деления с остатком, на два числа одновременно

Vadyxa82K

Новичок
Пользователь
Фев 27, 2021
4
0
1
Добрый день!
Window 10.
Python 3.9.1.
Изучаю пайтон. В книге после каждой главы, есть 10 заданий. Не могу выполнить одно.
Подскажете пожалуйста где у меня ошибка?

Само задание: Напишите программу для вычисления множества чисел (в пределах первой полусотни), которые делятся или на 3, или на 4, но при этом не делятся одновременно на 3 и 4.

Python:
A = {s for s in range(0, 51) if (s % 3 == 0 or s % 4 == 0) and (s % 3 != 0 and s % 4 != 0)}
print(A)
 

askme

Новичок
Пользователь
Ноя 17, 2020
3
0
1
когда проверяются два условия одновременно, но истинным должно быть лишь одно из них (делится либо на 3 либо на 4, но не на 3 и на 4 одновременно) удобно использовать "исключающее или" (^):
Python:
st = {x for x in range(51) if (x % 3 == 0) ^ (x % 4 == 0)}
print(st)
 

Vadyxa82K

Новичок
Пользователь
Фев 27, 2021
4
0
1
когда проверяются два условия одновременно, но истинным должно быть лишь одно из них (делится либо на 3 либо на 4, но не на 3 и на 4 одновременно) удобно использовать "исключающее или" (^):
Python:
st = {x for x in range(51) if (x % 3 == 0) ^ (x % 4 == 0)}
print(st)

Дело в том, что я использую оператор "или" в виде "or". И одна часть кода работает отлично.
То есть код работает в виде:
Код:
A = {s for s in range(0, 51) if s % 3 == 0 or s % 4 == 0}
print(A)
Получается: {0, 3, 4, 6, 8, 9, 12, 15, 16, 18, 20, 21, 24, 27, 28, 30, 32, 33, 36, 39, 40, 42, 44, 45, 48}

И:
Код:
A = {s for s in range(0, 51) if s % 3 != 0 and s % 4 != 0}
print(A)
Получается: {1, 2, 5, 7, 10, 11, 13, 14, 17, 19, 22, 23, 25, 26, 29, 31, 34, 35, 37, 38, 41, 43, 46, 47, 49, 50}

А вот вместе:
Код:
A = {s for s in range(0, 51) if (s % 3 == 0 or s % 4 == 0) and (s % 3 != 0 and s % 4 != 0)}
print(A)
Почему то пустое множество получается: set()
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Почему то пустое множество получается: set()
Потому что нет элементов соответствующих сразу двум условиям (первое - делиться на 3 и 4, а второе - не делиться на 3 и 4).
Попробуйте изменить условия, например число должно делиться на 3 и не делится 4 или делиться на 4 и не делиться на 3.
Python:
A = {s for s in range(0, 51) if (s % 3 == 0 and s % 4 != 0) or (s % 3 != 0 and s % 4 == 0)}
print(A)
 
  • Мне нравится
Реакции: Vadyxa82K

Vadyxa82K

Новичок
Пользователь
Фев 27, 2021
4
0
1
Потому что нет элементов соответствующих сразу двум условиям (первое - делиться на 3 и 4, а второе - не делиться на 3 и 4).
Попробуйте изменить условия, например число должно делиться на 3 и не делится 4 или делиться на 4 и не делиться на 3.
Python:
A = {s for s in range(0, 51) if (s % 3 == 0 and s % 4 != 0) or (s % 3 != 0 and s % 4 == 0)}
print(A)

Задание я взял из книги. Дело в том, что написано - делится или на 3, или на 4, но при этом не делятся одновременно на 3 и 4. То есть, как я понимаю, числа 3, 4, 6, 8, 9 и тд, должны были попасть в полученное множество.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Задание я взял из книги
Я имел ввиду не изменить задание, а изменить условия в коде (пример выше как раз это делает).
числа 3, 4, 6, 8, 9 и тд, должны были попасть в полученное множество
да, они попадают в полученное множество
Вот результат кода из примера выше:
Python:
{3, 4, 6, 8, 9, 15, 16, 18, 20, 21, 27, 28, 30, 32, 33, 39, 40, 42, 44, 45}
 
  • Мне нравится
Реакции: Vadyxa82K

Vadyxa82K

Новичок
Пользователь
Фев 27, 2021
4
0
1
Я имел ввиду не изменить задание, а изменить условия в коде (пример выше как раз это делает).

да, они попадают в полученное множество
Вот результат кода из примера выше:
Python:
{3, 4, 6, 8, 9, 15, 16, 18, 20, 21, 27, 28, 30, 32, 33, 39, 40, 42, 44, 45}

Спасибо большое! Даже не подумал о таком варианте. Тут дело даже не в коде, а в логике(.
 

Форум IT Специалистов