Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2022, 02:04   #11
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Для чего вам цикл "while count < len(pages):", если по списку страниц в любом случае будет нужен только один проход?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 13.02.2022, 22:59   #12
corpselles
 
Регистрация: 09.02.2022
Сообщений: 7
По умолчанию

А как можно по-другому? Через while True, но без досрочного выхода (break) из цикла?
corpselles вне форума Ответить с цитированием
Старый 14.02.2022, 01:30   #13
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Он просто ничего полезного не делает (а без цикла while нет смысла в count):
Код:
def print_document(pages):
    k = 0
    pub = list()
    count = 0
    while count < len(pages):
        for page in pages:
            if 'Секретно' not in page:
                count += 1
                if k == 0:
                    pub.append(page)
            else:
                count += 1
                k += 1
    if k == 0:
        pub.append('Напечатано без купюр')
    else:
        pub.append('Дальнейшие материалы засекречены')
    for s in pub:
        print(s)
Какой смысл перебирать страницы дальше, если была встречена засекреченная страница? А если делать break, то и смысл проверять k на ноль отпадает:
Код:
def print_document(pages):
    k = 0
    pub = list()
    for page in pages:
        if 'Секретно' not in page:
            if k == 0:
                pub.append(page)
        else:
            k += 1
            break
    if k == 0:
        pub.append('Напечатано без купюр')
    else:
        pub.append('Дальнейшие материалы засекречены')
    for s in pub:
        print(s)
А если воспользоваться тем, что else ветка цикла сработает только в том случае, когда не произошел досрочный выход из цикла, то можно отказаться от k:
Код:
def print_document(pages):
    k = 0
    pub = list()
    for page in pages:
        if 'Секретно' not in page:
            pub.append(page)
        else:
            k += 1
            pub.append('Дальнейшие материалы засекречены')
            break
    else:
        pub.append('Напечатано без купюр')
    if k == 0:
        pub.append('Напечатано без купюр')
    else:
        pub.append('Дальнейшие материалы засекречены')
    for s in pub:
        print(s)
Да и от гоняния элементов из списка в список, когда просят просто распечатать, нету пользы:
Код:
def print_document(pages):
    pub = list()
    for page in pages:
        if 'Секретно' not in page:
            pub.append(page)
            print(page)
        else:
            pub.append('Дальнейшие материалы засекречены')
            print('Дальнейшие материалы засекречены')
            break
    else:
        pub.append('Напечатано без купюр')
        print('Напечатано без купюр')
    for s in pub:
        print(s)
Ну и последнее замечание: "not in" проверяет, что в строке нет слова "Секретно", но если оно есть, то может быть на любом месте в строке, а в условии сказано про начало строки.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" Бахтиёр1916 Windows 1 05.04.2017 12:53
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
Для заданной строки определить все входящие в неё символ. Например: строка "abccbbabbac" состоит из символов "a", "b" и "c" Sandakan01 Помощь студентам 1 24.02.2016 03:20