Форум сайта python.su
Здраствуйте. Помогите пожалуйста с контрольной работай
Рассматривается множество целых чисел, принадлежащих числовому отрезку , которые делятся на 3 или 11 и не делятся на 2, 13, 22, 33. Найдите количество таких чисел и минимальное из них. В ответе запишите два целых числа: сначала количество, затем минимальное число.
Буду очень признателен, если кто-нибудь откликнется.
Офлайн
В условии задачи пропущены границы числового отрезка, поэтому ставлю от 1 до 100.
можно обойтись одним if, но тогда строка длинная и плохо читаемая выходит
def process_segment(start_point, finish_point): numbers = [] for number in range(start_point, finish_point+1): if (number % 3 == 0 or number % 11 == 0): if (number % 2 != 0 and number % 13 != 0 and number % 22 != 0 and number % 33 != 0): numbers.append(number) return len(numbers), min(numbers) print(process_segment(1, 100))
Отредактировано Ocean (Апрель 29, 2021 00:18:41)
Офлайн
OceanПоставь от 1 до 1000000000. Сколько памяти оно займёт? Надо сделать без списка и за один проход.
В условии задачи пропущены границы числового отрезка, поэтому ставлю от 1 до 100.
Отредактировано py.user.next (Апрель 29, 2021 12:40:12)
Офлайн
py.user.next
Спасибо большое!)
Я сперва так написала, а потом подумала, что это “колхоз и много кода”, если есть специальные функции для этого и можно “оптимизировать код”. Поэтому заменила на список и методы списка
# Первый вариант def process_segment(start_point, finish_point): count_dividers = 0 minimal_divider = finish_point for number in range(start_point, finish_point+1): if (number % 3 == 0 or number % 11 == 0): if (number % 2 != 0 and number % 13 != 0 and number % 22 != 0 and number % 33 != 0): count_dividers += 1 if number < minimal_divider: minimal_divider = number return count_dividers, minimal_divider print(process_segment(1, 100))
py.user.nextО! Вот это ваще не знала. Запомню.
Но в общем контексте функция len() считается допольнительным проходом.
Отредактировано Ocean (Апрель 29, 2021 17:37:50)
Офлайн
OceanЭто в code python такой баг. Если просто code поставить, то там нет лишнего пробела, но и подсветки нет. Поэтому в code python первую строку делаешь пустой и в её начале обязательно ставишь пробел, а код пишешь со второй строки. Также стираются пустые строки, поэтому в них нужно пробел ставить в начале. Баг не исправляется потому, что что-то цепляет. Если его исправить, то там он либо появится снова при следующем обновлении движка, либо что-то другое поплывёт и там тоже надо будет исправлять и там гору исправлений нужно будет делать, на которую надо сразу время планировать.
Когда в теги код вставляю, он словно лишний пробел добавляет в первой строке.
OceanКогда говорят “отрезок”, подразумевают от и до включительно. Когда говорят “интервал”, подразумевают от и до, не включая концы.
У меня есть один вопрос. Я не знаю только ли внутренние точки числового отрезка перебирать или граничные тоже.
if (number % 3 == 0 or number % 11 == 0): if (number % 2 != 0 and number % 13 != 0 and number % 22 != 0 and number % 33 != 0): count_dividers += 1 if number < minimal_divider: minimal_divider = number
if ((number % 3 == 0 or number % 11 == 0) and number % 2 != 0 and number % 13 != 0 and number % 22 != 0 and number % 33 != 0): count_dividers += 1 if number < minimal_divider: minimal_divider = number
if ((number % 3 == 0 or number % 11 == 0) and number % 2 != 0 and number % 13 != 0 and number % 22 != 0 and number % 33 != 0): count_divisors += 1 if number < minimal_divisor: minimal_divisor = number
Отредактировано py.user.next (Апрель 30, 2021 23:34:20)
Офлайн
py.user.nextО, спасибо большое
Это в code python такой баг.
py.user.nextСпасибо!
Когда говорят “отрезок”, подразумевают от и до включительно. Когда говорят “интервал”, подразумевают от и до, не включая концы.
py.user.nextВсегда с отступами на 4 пробела или на что ориентироваться?
Можно записать вот так
Офлайн
Я убрал лишние пробелы
Было так
if ((number % 3 == 0 or number % 11 == 0) and number % 2 != 0 and number % 13 != 0 and number % 22 != 0 and number % 33 != 0): count_divisors += 1 if number < minimal_divisor: minimal_divisor = number
if ((number % 3 == 0 or number % 11 == 0) and number % 2 != 0 and number % 13 != 0 and number % 22 != 0 and number % 33 != 0): count_divisors += 1 if number < minimal_divisor: minimal_divisor = number
OceanДаже один пробел всегда имеет значение. Поэтому есть ли пробел где-то или нет там пробела, это очень большое значение имеет. Это не в плане работы программы (семантики), не в плане правильности кода (синтаксиса). Потому что программа будет работать одинаково и интерпретироваться/компилироваться она будет одинаково. Этот пробел ни на что не влияет. Это имеет значение для работы с кодом, когда с ним работает человек руками где-то там. Также есть аспект когда с кодом работает программа “руками” где-то там, но мы этот аспект обсуждать сейчас не будем, так как тебе ещё рано об этом знать. Если ты семи нот не знаешь ещё всех точно, то как-то рановато раскрывать все секреты исполнения фламенко на восемнадцатиструнной гитаре, потому что без знания семи нот эти секреты не будут понятны даже близко, не будет понятен сам их смысл. Если кратко сказать, то существует такое пространство, целый мир, в котором одни программы пишут другие программы, и в этом пространстве существует множество всяких аспектов и нюансов тоже. Поэтому когда мы пишем код, мы думаем о том, что его может читать потом кто-то или что-то. И с ним этот кто-то или это что-то может ещё потом что-то делать. Поэтому мы на каждый пробельчик обращаем внимание.
Всегда с отступами на 4 пробела или на что ориентироваться?
Отредактировано py.user.next (Май 1, 2021 00:49:28)
Офлайн
py.user.next
ну что ) я еще с одним спасибо!
py.user.next
ак как тебе ещё рано об этом знать. Если ты семи нот не знаешь ещё всех точно, то как-то рановато раскрывать все секреты исполнения фламенко на восемнадцатиструнной гитаре, потому что без знания семи нот эти секреты не будут понятны даже близко, не будет понятен сам их смысл.
py.user.nextНу вот я видела где-то в коде Django приложений, что иначе строки “подвешивали”. Поэтому и спросила.
В данном случае мы ставим не четыре пробела, а мы стоим под открывающей круглой скобкой, правее её на один символ. Так получаются четыре пробела, но они получаются случайно.
py.user.nextДа, поняла. Это действительно логично.
Вставленную легко строку так же легко и вырезать обратно. Ну, и к комментированию для её временного выключения она также предрасположена. Также обрати внимание на первую строку условия и последнюю строку условия. Мы их не можем быстро вырезать, быстро заменить и тому подобное. Ну, мы могли бы их так же поставить, чтобы они тоже были пригодны для этого. Но мы этого не делаем и просто для этих двух строк делаем исключение из правил. Если мы будем их менять, мы потрудимся и попереставляем эти двоеточия там and'ы и прочие вещи. Мы идём на это осознанно, на вот эти неудобности.
Офлайн