Главная страница
Навигация по странице:

  • Видео Списки Видео Список является последовательностью

  • Северенс Ч. - Введение в программирование на Python - 2016. Введение в программирование на Python Ч. Северенс М. Национальный Открытый Университет "интуит", 2016


    Скачать 0.65 Mb.
    НазваниеВведение в программирование на Python Ч. Северенс М. Национальный Открытый Университет "интуит", 2016
    Дата20.03.2022
    Размер0.65 Mb.
    Формат файлаdocx
    Имя файлаСеверенс Ч. - Введение в программирование на Python - 2016.docx
    ТипДокументы
    #406251
    страница4 из 12
    1   2   3   4   5   6   7   8   9   ...   12

    ь


    Таким образом, Ь - это нулевая буква 'Ьапаnа', а - это первая буква и т.д.





    а

    п

    а

    [ О ]

    [11

    [ 2 ]

    [ З]

    [ 4 ]

    ( 5 ]


    Вы можете использовать любое выражение, включая переменные или операторы, в качестве индекса, но значение индекса должно быть целочисленным ( i n t e g er ):

    >>> letter = fn.li[t l .S]

    TypeError: string indices шust Ье integers


      1. Получение длины строки с использованием len


    len - встроенная фующия, которая возвраща ет число символов в строке:
    >>> fruit = 'Ьапаnа'

    >>> leп(fn.lit)

    6
    Чтобы получить последний символ в строке можно поп робовать следующее:
    >>> leпgth = leп(fruit)

    >>> last = fruit[le ngth]

    IndexError: string index онt of range
    Причина IndexError в том, что не существует буквы с индексом 6 в строке 'Ьаnапа', поэтом у исп равленный вариант:
    >>> last = fruit[length-1]

    >>> priпt last а
    Взамен можно использовать отрицательные индексы, которые считаются с конца. Выражение f ru i t [ -1] выдаст последний символ, fr u i t [ - 2 ] - второй с конца строки и т.д.


      1. Обход через строку с помощью цикла


    Множество вычислений включают посимвольную обработку строк. Часто они начинаются с начала строки, выбирают каждый символ по очереди, делают что-то с ним и продолжают до окончания строки. Этот шаблон обработки называется обход (traversal). Один из вариантов написания обхода с помощью цикла while:
    >>> index = О

    >>> while index < leп(frllit):

    letter = fruit[index] print letter

    index = index + 1


    ь


    а n а n а

    Этот цикл обходит строку и отображает каждый символ строки отдельно.

    Условием цикла является i nde x < len ( fr u i t ) , т.е. когда i n d e x станови тся равным длине строки, условие становится ложным (false) и тело цикла прекращает выполняться.
    Другой способ написания обхода с помощью цикла for:
    >>> for char in fruit:

    priпtchar
    Каждый раз, в цикле следующий символ в строке присваивается переменной c h ar . Цикл работает, пока не закончатся символы.


      1. Срез строки


    Часть строки называется срезом (slice). Выбор среза аналогичен выбору символа:
    >>> s = 'Мопtу Pythoп'

    >>> priпt s[O:S] М опtу

    >>> priпt s[б:13 ]

    PytЬon

    >>>

    Оператор [ n : m ] возвращает часть строки от n-oro символа до m-oro символа, включая первый, но исключая последний. Это противоречивое поведение, но оно позволяет представить индексные указатели между символами, как на следующей диаграмме:

    : а- :1 п- :' а-: п- :' а-: '





    1

    1

    o 4
    fruit '

    ь1: : : : : :

    index О 1 2 З 4 5 б

    Если опустить первый индекс (перед двоеточием), то срез будет начинаться с начала строки. Если вы опустите второй индекс - срез заверпmтся в конце строки:
    >>> fruit = 'Ьапаnа'

    >>> fruit[:3] 'Ьап'

    >>> fruit[З:] 'a na'
    Если первый индекс больше или равен второму, то результатом будет пустая строка (e mp t y s tr i n g ), представленная двумя кавычками:
    >>> fruit = 'Ьапаnа'

    >>> fruit[З:3 ]



      1. Строки являются неизменяемыми


    Заманчиво использовать оператор с левой стороны при присвоении с намерением изменить символ в строке.

    Например:
    >>> greetiпg = 'Hello, world!'

    >>> greetiпg[O] = 'J'

    TypeError: object does not support item assigпmeпt

    Объект (object) в этом случае является строкой, элемент (iteш) - символ, который пытаемся изменить. На данный момент будем считать, что объект - некоторая вещь как переменная, но мы уточним это определение позже.
    Элемент - одно из значений последовательности.
    Причина 01Ш1бки в том, что строки являются неизменяемыми (iшшutаЫе), поэтому вы не можете изменить существующую строку. Лучшее, что можно сделать - создать новую строку, которая является вари антом оригинальной:

    >>> greetiпg = ' He llo, world!'

    >>> new_greetiпg = 'J' + greetiпg[l :]

    >>> priпt new_greetiпg Jello, world!
    Этот пример соединяет новую первую букву со срезом greetiпg, это не вли яет на оригинальную строку.


      1. Циклы и счет


    Следующая программа подсчитывает количество вхождений буквы а в строку:
    >>> word = 'Ьапапа'

    >>> couпt = О

    >>> for letter iп word:

    if letter == 'а':

    сош1t = count + 1

    >>> priпt couпt

    3
    Эта программа демонстрирует другой шаблон вычислений под названием - счетчик (c o un t er ). Переменной couпt присваивается нулевое начальное значение, затем это значение инкременти руется (увеличивается на 1) всякий раз, когда встр ечается символ а. Когда цикл завершается, в count содержится результат подсчета .

      1. Оператор in


    Слово i n - это логический оператор, который принимает две строки и возвращает True, если первая строка является подстрой во второй строке:
    >>> 'а' in 'Ьanana' True

    >>> 'seed' in 'Ьanana' False


      1. Сравнение строк


    Оператор сравнения работает для строк. Рассмотрим вариант, если две строки одинаковые (e q ua l ):

    >>> word = 'Ьanana'

    >>> if word == 'Ьanana':

    print 'All rigl1t, bananas.'
    Другие операции сравнения полезны для ввода слова в алфавитном порядке:

    word = 'Ьanan'

    if word < 'Ьanana':

    print 'Уош word,' + word + ', сошеs before banana .' elif word > 'Ьanana':

    print'Уош word, ' + word + ', comes after banana.' else:

    print 'All rigl1t, bananas.'
    Python не обрабатывает буквы верхнего и нижнего регистра так же как это делают люди. Все буквы верхнего регистра идуr перед буквами нижнего регистра, так:
    Уош word, Pineapple, comes before banana.
    Общий подход к решению этой проблемы - преобразовать строку в

    стандартный qюрмат, такой как ниж ний регистр, перед выполнением сравнени я. Имейте это в виду, чтобы защитит ь себя от вооруженного Ананасом человека (Pmeapple).


      1. . Строковые методы


    Строка - пример объекта в Python. Объекты содержат данн ые (фактически саму строку) и методы, которые являются фующиями, встроенными в объект и доступными для любого экземпляра (mstance) объекта.
    В Pythoп есть фующия dir, которая выводит список доступных методов для объекта. Функция type показывает тип объекта:
    >>> stuff = 'Hello world'

    >>> type(stuff)

    < type 'str'>

    >>> dir(stнff)

    ['ca pitalize'' 'center'' 'сош1t'' 'deco d,e' 'епсоdе' '

    'endswith', 'expandtabs', 'find', 'format',m' dex',

    'isah1шn', 'isalpl1a', 'isdigit', 'islower', 'isspace', 'istide', 'isнpper', 'jom', 'ljust', 'lower', 'lstrip',

    'partitioп', 'replace', 'rfiпd', 'riпdex', 'rjust', 'rpartitioп', 'rsplit', 'rstrip', 'split', 'splidiпes', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'нрреr', 'zfill']

    >>> help(str.capitalize) Help оп шethod_descriptor:

    сарitalize(... )

    S .ca pitalize() -> striпg

    Retнm а сору of the striпg S with only its first character capitalized.

    >>>
    Вы можете воспользоваться дополнительную инqюрма ц ию документации по строковым docs.python.orgЛiЬrary /striпg.h tml

    функцией he l p, чтобы о методе. Лучший

    методам находится тут:

    получить источ ник ссылка:

    Метод вызывается подобно фующии - он принимает на вход аргументы и возвращает значение, но различается синтаксис. Мы вызываем метод путем добавления имени метода к имени переменной, используя точку в качестве разделителя.
    Например, метод upper получает на вход строку и возвращает новую строку со всеми буквами в верхнем регистре:
    >>> word = 'Ьа11а11а'

    >>> 11ew_word = word.нpper()

    >>> priпt 11ew_word

    BANANA
    Пустые круглые скобки означают, что метод не имеет аргументов. Вызов метода называется вызовом (iпvocation), в этом случае мы можем сказать, что вызвали метод upper объекта word.
    Рассмотрим строковый метод fiпd:
    >>> word = 'Ьавапа'

    >>> index = word.fiпd('a')

    >>> priпt index 1

    >>>
    В этом примере мы вызвали метод f i n d объекта wor d и п е редали в качестве входного параметра букву, которую ищем. Метод f i nd может искать подстроки, а не только отдельные символы:

    >>> word.fiпd('пa')

    2
    В качестве второго аргумента метод f i nd принимает индекс, с которого начинается поиск вхождения:
    >>> word.fiпd('пa', 3)

    4
    Одной из распространенных задач является устранение пробелов (пробелов, табуляции или символов перевода строки) с самого начала и

    до конца строки с помощью метода s tr i p:
    >>> line = 'Here wego'

    >>> line.strip() 'Here we go'
    Некоторые методы, такие как s t ar t s wi t h возвращают логические значения:

    >>> line = 'Please have а nice day'

    >>> line.startswith('Please') True

    >>> line.startswith('p') False
    Предварительно применим метод l o wer , пе реводящий строку в нижний регистр:
    >>> line = 'Please have а nice day'

    >>> line.startswith('p') False

    >>> line.lower() 'please \1ave а пiсе day'

    >>> line.lower().startswith('p') True
    В последнем примере мы вызвали в одном выражении подряд два метода.


      1. Разбор (parsing) строк


    Часто мы хотим заглянуть в строку и найти подстроку. Для примера, если мы имеем несколько строк, отформатированных следующим образом:
    Froш stephen.marquard@ uct.ac .za Sat Jan 5 09:14:16 200
    И мы хотим вытащить только вторую часть адреса (например, uct.ac.za)

    из каждой строки. Это можно сделать с использованием метода f i n d и

    строкового среза.
    Во-первых, мы находим положение аt-символа (@) в строке. Затем находим позицию первого пробела после аt-символа. После этого с использованием строкового среза извлекаем часть строки, которую ищем:
    >>> data = 'From stephen.marqнard@uct.ac.z.a Sat J an 5 09:14:16 2008'

    >>> atpos = data.fiпd('@')

    >>> priпt atpos 21

    >>> sppos = data.fiпd(' ',atpos)

    >>> priпt sppos

    31

    >>> host = data[atpos+l:sppos]

    >>> priпt host uct.ac.z.a
    Мы используем версию метода fiпd, которая позволяет нам задать позицию в строке, начиная с которой хотим выполнять поиск.


      1. Оператор форматирования


    Оператор формати рования % позволяет создавать строки, заменяя часть строки с данными, хранящимися в переменных. Когда он применяется к целым числам - это операция взятия по модулю.
    Первым операндом является строка форматирования (forrnat striпg), которая содержит одну или более последовательностей форматирования (format sequences), которые определяют форматирование второго оператора.
    Результатом является строка.
    Например, последовательность форматирования '%d' означает, что второй оператор должен быть отформатирован как целочисленное значение (d от de c i ma l ):

    >>> caшels = 42

    >>> '%d' % caшels '42'
    Результатом является строка '42', которую не следует путать с целочисленным значением 42.
    Последовательность форматирования может появиться в любой части строки, поэтому возможно встраивать последовательность в предложение:

    >>> caшels = 42

    >>> '1 have spotted %d caшels.' % caшels

    '1 have spotted 42 caшels.'
    Если есть более чем одна форматируемая пос ледовательность в строке, второй аргумент должен быть кортежем (tuple). Каждая форматиру емая последовательность сочетается по порядку с элементом кортежа. В

    следующем примере используется '0,110d'форматирование для

    целочисленных значений, '%g' - для чисел с плавающей точкой (не спраllШвайт е, почему), и '%s' - для форматирования строки:
    >>> 'ln %d years I have spotted %g %s.' % (3, 0.1, 'camels') 'ln З years I have spot ted 0.1 camels.'

    Количес тво элементов в кортеже долж но совпадать с количеством форматируемых последовательностей в строке. Кроме того, типы элементов должны соответствовать форматируемым последова тельностям:
    >>> '%d %d %d' % (1, 2)

    TypeError: not enough arguments for format str.ing

    >>> '%d' % 'dollars'

    TypeError: illegal argumeпt type for bнilt-.in operation Более подробно об операторе форматирования: ссылка:docs.pythoп.orgЛiЬ/typesseq-s triпgs.html

      1. Словарь

    Счетчик (coШ1ter): А vаrы.Ые used to cotmt somethiпg, usually miililized to zero апd tЬеп шcremented.
    Пустая строка (empty strшg): А strшg witЬ по charac ters and length О,

    represented Ьу two qнotation marks.
    Оператор форматирования (format operator): Ап operator, %, that takes а format striпg and а tuple and generates а strшg that шcludes the elements of the tuple formatted as specified Ьу tЬе format strшg.
    Последовательность форматирования (forrnat sеqпепсе): А seqпence of cl1arac tersш а forrnat strшg, like %d, that specifies how а value should Ье forrnatted .
    Строка форматирования (forrnat strшg): А strшg, пsed with tЬе format operator, that contaiпs format seqпences.
    Флаг (fag): А boolean varnЫe used to шdicate whether а condition is true. Вызов (iпvocation):А statemeпt that calls а method.

    Неизменяемый (Ш1Шпtа Ые): Tl1e pro perty of а sequence wlюse items cannot Ье assigned.
    Индекс (шdех): An шteger value used to select an item iп а sеqпепсе, such as а cl1aracterш а striпg.
    Элемент (item): Опе of the values iп а sequeпce .

    method: А fi.mction tЬat is assocвted with an object and called usшg dot пo tation. Объект (object): Somethшg а vаrы.Ые сап refer to. For поw, уоп сап use

    "object" апd ''valueш" terchangeaЫy.
    Поиск (search): А pattern of traversal that stops when it fiпds what it is lookшg for.
    Последовательность (sequence): An ordered set; tl1at is, а se t of values where eacl1valнe is ideпtified Ьу an шteger шdех.
    Срез (slice): А part of а strшg specified Ьу а raпge of шdices.

    Обход (traverse): То iterate through tЬе items in а sequence, performing а similar operation оп each.

    Программа с вводом числа
    Видео

    Файлы
    Видео


      1. Введение


    До сих пор мы учились тому, как писать программы и сообщать о наших намерениях центральному процессору (Ceпtral Processing Unit), используя условные инструкции, функции и итерации. Мы учились, как создавать и использовать структуры данных в оперативной памяти (Main Memory). В CPU и памяти работает и выполняется наше программное обеспечение (ПО).
    Здесь происходит "мьши ение".
    Но если вы помните из нашего обсуждения архитектуры оборудования, одно выключение питания и все хранящееся в CPU или оперативной памяти стирается. До этого момента наши программы имели временное развлекательное назначение для изучения Pythoп.


    Sofltware




    -

    Centra.l P'rocessing Unit








    Net\vork

















    - Secondary

    Memory




    M ain

    Memory

    -




    В этой главе мы начинаем работать с вторичной памятью (Secoпdary Мешоrу) или файлами. Вторичная память не очищается, когда выключается электричес тво. В случае с USВ-флешками, данные можно

    на них записать, после этого USВ-флешки моrуг быть Удалены из сис темы и перенесены в другую систему.
    Мы сос редоточимся на чтении и записи текстовых файлов, таких, которые создаются в текстовом редакторе. Позже мы рассмотрим, как работать с файлами баз данн ых, такими, как бинарные файлы, специ ально разработанные для чтения и записи через ПО баз данных.


      1. Открытие файлов


    Когда мы хотим прочитать или записать файл (скажем, на жестком диске), во-первых мы должны открыть этот файл. Об открытии файла сообщается операционной системе (ОС), которая знает, где хранятся данные для каждого из файлов. Когда вы открываете файл, вы обращаетесь к ОС, чтобы найти файл по имени и Удостовериться, что файл существует. В следующем примере мы открываем файл mbox.txt, который должен находиться в той же папке, откуда запускается Pytho11. Скачать файл можно по ссылке:
    ссылка: pycode.ru/files/python/mЬox.txt
    >>> fuand = ореп('шЬох.tхt')

    >>> priпt(fuand)

    <_io.TextIOWrapper name='mbox.txt' mode='r' encodiпg='cp1251'>
    Если функция ореп зaвeplllliтcя успеIШIО, то ОС вернет дескриптор файла (file handle). Дескриптор файла не является действующими данными, содержащимися в файле, это "обработчик", который мы можем использовать для чтения данных. У вас есть дескриптор, если запраlllliваемый файл существует и имеет надлежащие права на чтение.





    From stephen.m..




    Return-Path; <р ..

    ......

    Date : S ait , 5 Jan ..

    Т о ; .source@co l l , .

    From: s t eph en., , .

    - -




    Subject: [ s a k a i ] . , .




    Det ails: ht t p : / . . .




    • . . .



    mbox.tx ·t

    Если файл не существует, функция open выдаст 01Ш1бку с указанием причины и вы не получите дескриптор с доступом к содержимому файла:
    >>> fhand = opeп('stuff.txt') Traceback (most receпt call last):

    File "
    ", liпe 1, h1 fhaпd = opeп('staff.txt')

    IOError: [Errno 2] No such file or d п-ectory : 's ta ff.txt'
    Позже мы восполь зуемся инструкциями try и except, чтобы сделать более изящной обработку ситуации, когда мы открываем файл, который не существует.


      1. Текстовый файл и строки


    Текстовый файл можно представить как последовательнос ть строк. В качестве примера рассмотрим текстовый файл, который содержит записи почтовой активности от различных лиц в команд е разработчиков проекта с открытым исходны м кодом:
    Froшstephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008 Return- Paili:
    r@collab.sakai project.org>

    Date: Sat, 5 Jan 2008 09:12:18 -0500

    То: soшce@collab .sak aiproject.org

    Froш: stepheп.marquard@uct.ac.za

    Subject: [sakai] svп comшit: r39772 - coпtent/Ьraпcl1es/

    Details: http://soшce.sakaiproject.org/ viewsvп/?view=rev&rev=39772

    Полн ая версия файла доступна по ссылке:
    ссылка: pycode.ru/files/python/mЬox.txt и сокращенная версия
    ссылка: pycode.ru/files/python/mЬox-short. txt. Это файлы, которые содержат множество почтовых сообщений в стандартном формате. Строки, которые начинаются с ''From " отделяют сообщение и строки, которые начинаются с ''From:" являются частью сообщения. Более подробная информация по ссылке: ссылка: eп.wikipedia.org/wiki/Мbox.
    Чтобы разбить файл на строки, существует специальный символ, который представляет "конец строки" и называется символом новой строки.
    В Pythoп мы представляем символ новой строки, как строковую константу '/п'. Даже не смотря на то, что это выглядит как два символа - на самом деле один символ. Когда мы смотрим переменную, введя "stuff" в интерпретаторе, она отображается с \п в строке, но когда мы используем функцию priпt - видим, что строка разбилась на две по символу новой строки.
    >>> stuff = 'Hello\пWorld!'

    >>> stuff

    'Hello\пWorld!'

    >>> priпt(stuff) Hello

    World!

    >>> leп(stuff) 12

    >>>
    Также можно видеть, что длина строки 'Hello\пWorld!' сос тавляет 12 символов, т.к. новый символ считается за один.
    Поэтому, когда мы смотрим на строки в файле, необходимо представлять

    (!), что есть специальные невидимые символы в конце каждой строки, которые обозначают конец строки.
    Froш stephen.marquard@ uct.ac .za Sat Jan 5 09:14:16 2008 \п Retum-Рath:
    \ п

    Date: Sat, 5 Jan 2008 09:12:18 -0500\п

    То: soшce@collab .saka iproject.org\п Froш: stepheп.marquard@uct.ac.za\п

    Subject: [sakai] svп commit:r39772 - coпtent/Ьra11cl1es /\ 11

    Details: http://soшce.saka iproject.org/viewsvn/?view=rev&rev=39772\n

    Таким образом, символ новой строки отделяет символы в файле внугри строк.


      1. Чтение файлов


    До т ех пор, пока дескриптор файла не содержит данные, создадим конструкцию с оператором for, читая в цикле и увеличивая счетчик для каждой строки в файле.
    >>> fuand = opeп('mbox.txt')

    >>> co1mt = О

    >>> for line h1fuaпd:

    сош1t = count + 1

    >>> prh1t('Lme C ount:', count) Lm e Count: 132045
    Мы можем использовать дескриптор файла как последовательность в цикле for. Наш цикл считает количество строк в файле и выводит окончательное значение на экран. Грубый перевод цикла for на человеческий язык: "для каждой строки в файле, представленной файловым дескриптором, увеличить переменную count на еди ницу".
    Причи на, по которой функция ореп не читает весь файл, заключается в том, что файл может иметь гигабайты данных. Функция open занимает одинаковое количество времени, независимо от размера файла.
    В случае, когда файл читается с использованием цикла for, Pythoп

    заботится о разбиении данных в файле на отдельные строIО-1, используя символ новой строIО-1. Pytl10n читает каждую строку, используя новую строку, и включает новую строку, как последний символ в переменную line для каждой итерации цикла for.
    Поэтом у цикл for читает данные по одной строке за раз, это эфрективное чтение и подсчет строк в большом файле без загрузIО-1 всей памяти для хранения данных. Программа, написанная выше, может считать строIО-1 в файле любого размера, используя немного памяти для чтения каждой строIО-1, подсчета и их сброса.
    Если вы знаете что, файл является относительно небольшим по сравнению с размером вашей оперативной памяти, вы можете прочитать весь файл в одну строку, используя метод read для дескриптора файла.

    >>> fhand = opeп('шbox-s ho rt .txt')

    >>> inp = fl1aпd.read()

    >>> рriпt(leп(.iпp)) 94626

    >>> priпt(.iпp[:20]) Froш stepheп.шarquar
    В этом примере все содержимое (94626 символов) файла шbox-short.txt прочитано непосредственн о в переменную inp. Мы воспользовались строковы м срезом для печати 20 символов строIО-1 данных , х ранящейся в iпр.
    Помнит е, что такой способ использования функции open возможен только, если файл данных бУдет Удобно помещаться в оперативную память вашего компьютера, иначе используйте циклы for или while.


      1. Поиск через файл


    Когда вы ищете данные через файл, это очень общий шаблон чтения через файл, игнорируя большинство строк и обрабатывая строIО-1, которые соответст вуют определенному критерию. Мы можем объединить шаблон для чтения файла со строковыми методами, построив простой механизм поиска.

    К примеру, если мы хотим прочитать файл и вывести на экран строки, которые начинаются с префикса ''From:", мы можем воспользоваться строковым методом startswith, выбрав строки с желанным префиксом.

    >>> fhand = o peп('mbox-short.txt')

    >>> for line h1 fhaпd:

    if line.startswi th('From:') :

    prh1t(line)

    П рограмма выполняется, получаем следующий результат: Froш: stephen.marquard@uct.ac.za

    Froш: louis@media.berkeley.edu Froш: zqiaп@шnich.edu

    Froш: rjlowe@iupui.edu Froш: zqiaп@ шnich.edu Froш: rjlowe@iнpui.edu

    Мы получили желаемый результат. Но откуда пустые строки? Это результат невидимости символа новой строки. Каждая строка оканчивается новой строкой, т.к. функция print печатает строку из переменной line, которая включает новую строку и затем функция prh1t добавляет другую новую строку, в результате мы наблюдаем эффект двойного пробела.
    Мы могли бы использовать строковый срез, чтобы напечатать все, кроме последнего символа, но простой подход заключается в использовании метода rstrip, который удаляет пробелы в правой части строки следующим образом:
    >>> for line h1 fhand: line = lh1e.rstrjp()

    if line. startswith('F rom:'): prh1(tline)
    Получим следующий результат:
    Froш: stepheп.marquard@uct.ac.za Froш: louis@media.berkeley.edu

    Froш: zqiaп@шnich.edu Froш: rjlowe@iпpui.edu Froш: zqiaп@ шnich.edu

    Вы можете усложнить структуру поиска , воспользовавшись инструкцией contiппe. Основная идея поиска в цикле - вы ищете "интересные" строки и пропускаете ''неинтересные ". И когда находи те интересную строку - выполняете с ней какие-то действи я.
    Мы можем построить цикл по следующему шаблону, п ропус ка я неинтересные строки:
    >>> for line n1fhaпd:

    lli1e = line.rstrip()

    if поt lli1e.sta rtswitl1('From:'): contnшe

    рriпt(line)
    Вывод программы совпадает с предыдущим.
    Мы можем использовать строковый метод fiпd для имитации поиска в текстовом редакторе. Так как fiпd ище т вхождения строки в другой строке и либо возвращает позицию строки или -1, если строка не най дена, мы можем написать следующий цикл, чтобы показать строки, которые содержат "@uct.ac.za" (то есть письма приходят из университе та Кейптауна в Южной Африке):

    >>> fhaпd = o peп('mbox-short.txt')

    >>> for line n1fhaпd:

    line = line.rstrip()

    if line.fiпd ('@uct.ac.za') == -1 : сопtшпе

    priпt(line)
    Получили следующий результат:
    From stephen.marquard @пct.ac.za Sa t Jan 5 09:14:16 2008

    X-Authentication-Warпiпg: пakamшa. uits.iupui.edu: apache set sender to stephen.marquard@uct.ac.za пsn1g - f

    Froш: stepheп.marquard@uct.ac.za Autl10r: stepheп.marquard@uct.ac.za

    Froш david.horwitz@нct.ac.za Fri Jап 4 07:02:32 2008

    X-Aнthentication-Waшing: nakam ura.uits.iupuiedu: apache set sender to david.horwitz@нct.ac .za нsing -f

    Froш: david.l10rwitz@uct.ac.za Autl10r: da vid.horwitz@uct.ac. za

    r39753 1 da vid.horwitz@uct.ac.za l 2008-01-04 13:05:51 +0200 (Frt 04 Jап

    2008) 1 1 line

    Froш david.horwitz@нct.ac.za Fri Jan 4 06:08:27 2008

    X-Aнthentication-Waшing: nakamura.uits.iupui.edu: apache set sender to david.horwitz@нct.ac.za нsing -f

    Froш: david.l1orwitz@uct.ac. za
    Печать файла


    Видео

    Списки
    Видео


      1. Список является последовательностью


    Подобно строке, список - последовательность значений. В строке значениями являются символы, в списке - они могут быть любого типа. Значения в списке называются элементами (elements) или иногда записями (items).
    Есть несколько путей создания нового списка, самый простой - заключить элементы в квадратные скобки [ ]:

    >>> [10, 20, 30, 40]

    [10, 20, 30, 40]

    >>> ['crunchy frog', 'ram bladder' , 'lark vomit'] ['crunchy frog', 'rаш bladder', 'lark vomit']
    В первом примере - список из четырех целых чисел, во втором - список из трех строк.

    Элементы списка могут быть разного типа . Следующий список содержит строку, число с плавающей точкой, целое число и (внимание!) другой список:

    >>> ['spam', 2.0, 5, [10, 20]]

    ['sраш', 2.0, 5, [10, 20]]
    Список внутри другого списка является вложенным (nested).
    Список , который не содержит элементом, называется пустым (ешрtу list), его можно создать с помощью пустых квадратных скобок [ ].
    >>> cheeses = ['Cheddar', 'Edam', 'Gouda']

    >>> nшnbers = [17, 123]

    >>> empty = []

    >>> priпt cheeses, пшnbers, empty ['Cheddar', 'Edam', 'Gouda'] [17, 123] []

      1. Списки изменчивы


    Синтаксис для доступа к элементам списка похож на дос туп к символам строки - оператор скобки. Выражение внутри скобок определяют индекс. Запомните, что индекс начинается с нуля:
    >>> priпt cheeses[O] Cl1eddar
    В отличие от строк, списки можно изменять, поэтому вы можете изменить порядок элементов в списке или переприсвоить элементы в списке. Когда оператор скобок появляется в левой части выражения, он определяет элемент списка, который будет присвоен.

    >>> пшnbers = [17, 123]

    >>> пшnbers[l] = 5

    >>> priпt nшnbers

    [17, 5]
    Вы можете представить список как связь между индексами и элементами. Эта связь называется отображением (mapping), каждый индекс отображается на один из элементов.
    Следующая диаграмма состояний показывает списки cheeses, пшnbers и ешрtу:


    1   2   3   4   5   6   7   8   9   ...   12


    написать администратору сайта