Найти - Пользователи
Полная версия: Как вывести числа из list - только чётные и только до определённого момента?
Начало » Python для новичков » Как вывести числа из list - только чётные и только до определённого момента?
1 2
GLADIATORD
Прохожу онлайн курс для новичков. Обычно нахожу решение сам, но тут застрял конкретно. Бьюсь уже третий день.

Есть список трёхзначных чисел

 numbers = [числа, числа, много_чисел, 237, числа, ещё_больше_чисел]

Так вот, нужно вывести только чётные числа и только до 237, всё что идёт после 237 выводить нельзя.

Нашёл решение для “только чётные”:

 numbers = num for num in numbers if num % 2 == 0
print("Even numbers in the list: ", numbers) 

Но остаётся вопрос, как остановить выполнение на числе 237?
Пробовал использовать
 range()
, неполучается
py.user.next
  
>>> lst = [1, 2, 3, 4, 237, 5, 6, 7, 8]
>>> 
>>> out = [i for i in lst[:lst.index(237)] if i % 2 == 0]
>>> out
[2, 4]
>>>

  
>>> import itertools
>>> 
>>> lst = [1, 2, 3, 4, 237, 5, 6, 7, 8]
>>> 
>>> out = [i for i in itertools.takewhile(lambda i: i != 237, lst) if i % 2 == 0]
>>> out
[2, 4]
>>>
AD0DE412
в дополнение
и еще
GLADIATORD
Первый вариант помог. Второй пока неполучается применить

Спасибо большое! Буду пытаться разобраться теперь, как это вообще всё вместе работает))
GLADIATORD
Офигеть! Кое-как нашёл правильное решение:

 numbers = [числа]
for i in numbers:
    if i % 2 == 0:
        print(i)
    if i == 237:
        break

Вывел только чётные и только до 237, и что вы думаете? Курс сказал что это неправильно!
Ну я плюнул и посмотрел решение которое предлагал курс, вот оно:

 for number in numbers:
    if number == 237:
        break
    if number % 2 == 1:
        continue
  print(number)
Т.е. я вывел результат неправильным способом? Смешно. Результат то у меня был тот же
py.user.next
GLADIATORD
Т.е. я вывел результат неправильным способом? Смешно. Результат то у меня был тот же
Не, он подставил кроме 237 ещё другое число. Например, число 238. И твой код его вывел. А ведь это противоречит условию. Маркер конца нельзя выводить.
artem1584
Можно попробовать реализовать с циклом while
https://pythonclass.ru/python/cikl-while-v-python/#continue
GLADIATORD
py.user.next
Не, он подставил кроме 237 ещё другое число.

Вот полный код (мой):

 numbers = [
    951, 402, 984, 651, 360, 69, 408, 319, 601, 485, 980, 507, 725, 547, 544,
    615, 83, 165, 141, 501, 263, 617, 865, 575, 219, 390, 984, 592, 236, 105, 942, 941,
    386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345,
    399, 162, 758, 219, 918, 237, 412, 566, 826, 248, 866, 950, 626, 949, 687, 217,
    815, 67, 104, 58, 512, 24, 892, 894, 767, 553, 81, 379, 843, 831, 445, 742, 717,
    958, 609, 842, 451, 688, 753, 854, 685, 93, 857, 440, 380, 126, 721, 328, 753, 470,
    743, 527
]
for i in numbers:
    if i % 2 == 0:
        print(i)
    if i == 237:
        break

Вот output:
<script.py> output:
402
984
360
408
980
544
390
984
592
236
942
386
462
418
344
236
566
978
328
162
758
918

Вот полный код - (что предлагается как “правильное” решение):
 numbers = [
    951, 402, 984, 651, 360, 69, 408, 319, 601, 485, 980, 507, 725, 547, 544,
    615, 83, 165, 141, 501, 263, 617, 865, 575, 219, 390, 984, 592, 236, 105, 942, 941,
    386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345,
    399, 162, 758, 219, 918, 237, 412, 566, 826, 248, 866, 950, 626, 949, 687, 217,
    815, 67, 104, 58, 512, 24, 892, 894, 767, 553, 81, 379, 843, 831, 445, 742, 717,
    958, 609, 842, 451, 688, 753, 854, 685, 93, 857, 440, 380, 126, 721, 328, 753, 470,
    743, 527
]
for number in numbers:
    if number == 237:
        break
    if number % 2 == 1:
        continue
    print(number)

Вот output:
<script.py> output:
402
984
360
408
980
544
390
984
592
236
942
386
462
418
344
236
566
978
328
162
758
918

Как видите, оба варианта дают один и тот же output, однако мой вариант сайт непринял и сказал “вы, дядя, ошибаетесь, надо вот так:..”

Вот о чём я.
Ocean
py.user.next
Не, он подставил кроме 237 ещё другое число. Например, число 238. И твой код его вывел. А ведь это противоречит условию. Маркер конца нельзя выводить.

py.user.next
Можно по этому кейсу у тебя уточню? Несколько дней не могу понять ответы.

  
numbers = [1, 240, 3, 8, 238, 237, 242, 10, 11, 12, 244]
for number in numbers:
    if number % 2 == 0:
        print(number)
    if number == 237:
        break
Напечатает: 240, 8, 238

  
numbers = [1, 240, 3, 8, 238, 237, 242, 10, 11, 12, 244]
for number2 in numbers:
    if number2 == 237:
        break
    if number2 % 2 == 1:
        continue
    print(number2)
Напечатает: 240, 8, 238

Я туплю какое другое число он подставил и почему код его вывел?
Напиши, пожалуйста, числовую последовательность, на которой ломается первая программа, которую написал GLADIATORD.
Я понимаю разницу в условиях, но не могу уловить, что ломает первый код. На каком кейсе сломается.
Заранее очень благодарна


Пы.сы. Писала, когда не видела последний пост автора. Сейчас покопаюсь еще в числовом ряду)
Вот покопалась

Идентично все выглядит.
https://ibb.co/bdV30ZH


ссылка на файлик, если на скрине неудобно

Rafik
В if number2 == 237 вместо 237 поставь 238 и будет чудо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB