Поиск по базе сайта:
Методичні вказівки до лабораторної роботи №7 з дисципліни «Комп’ютерна лінгвістика» для студентів спеціальності 02030303 «Прикладна лінгвістика» icon

Методичні вказівки до лабораторної роботи №7 з дисципліни «Комп’ютерна лінгвістика» для студентів спеціальності 02030303 «Прикладна лінгвістика»




НазваМетодичні вказівки до лабораторної роботи №7 з дисципліни «Комп’ютерна лінгвістика» для студентів спеціальності 02030303 «Прикладна лінгвістика»
Сторінка1/5
Дата конвертації06.01.2013
Розмір0.51 Mb.
ТипМетодичні вказівки
  1   2   3   4   5


МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»

іНСТИТУТ КОМП’ютерних НАУК та ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ


Кафедра систем автоматизованого проектування





ВИВЧЕННЯ БІБЛІОТЕКИ ПРИКЛАДНИХ ПРОГРАМ NLTK, ДЛЯ ОПРАЦЮВАННЯ ТЕКСТІВ ПРИРОДНОЮ МОВОЮ


ОСНОВИ СТРУКТУРНОГО ПРОГРАМУВАННЯ МОВОЮ PYTHON


Методичні вказівки до лабораторної роботи № 7

з дисципліни «Комп’ютерна лінгвістика»

для студентів спеціальності 7.02030303 «Прикладна лінгвістика»

денної та заочної форм навчання


Затверджено на засіданні кафедри

«Системи автоматизованого проектування»

Протокол № 16 від 17.05.2011 р.


Затверджено на засіданні методичної ради ІКНІ

Протокол № 9-10/11 від 18.05.2011 р.


Зареєстровано в НМУ НУ «ЛП»

№ 3524 від 2.06.2011


Львів-2011

^ ОСНОВИ СТРУКТУРНОГО ПРОГРАМУВАННЯ МОВОЮ PYTHON. Методичні вказівки до лабораторної роботи № 7 з дисципліни «Комп’ютерна лінгвістика» для студентів спеціальності 7.02030303 денної та заочної форм навчання/Укл. А.Б.Романюк, І.Ю Юрчак. - Львів: Національний університет «Львівська політехніка», 2011. – 23 с.



Укладачі:

Романюк А. Б., канд. техн. наук, доцент

Юрчак І.Ю., канд. техн. наук, доцент



Відповідальна за випуск:

Юрчак І.Ю., канд. техн. наук, доцент



Рецензент:

Теслюк В.М., д.т.н., професор кафедри САПР


^ МЕТА РОБОТА


  • Вивчення основ програмування на мові Python.

  • Вивчення основ структурного програмування мовою Python.

  • Повторення та закріплення знань отриманих при виконанні попередніх лабораторних робіт.

  • Покращення загальних навичок у програмуванні.


^ КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ


Виконання даної лабораторної роботу дозволить знайти відповіді на такі основні питання:

  1. Яким чином писати гарно структуровані, чіткі, сприйнятливі (читабельні) програми, придатні для неодноразового використання?

  2. Яким чином працюють основні конструкційні блоки, а саме: цикл, функція, присвоювання?

  3. Які можуть бути пастки при програмуванні на Python та як їх уникати?



^

1. Основи програмування

1.1 Присвоювання


Присвоювання – найпростіше поняття програмування, але навіть і йому властиві певні тонкощі. Розглянемо приклад:

 

>>> foo = 'Monty'

>>> bar = foo #1

>>> foo = 'Python' #2

>>> bar

'Monty'




Коли записується bar = foo (рядок програми #1), то значення змінної foo (стрічка 'Monty') присвоюється змінній bar. Таким чином, bar є копією foo. Якщо змінити foo на нову стрічку 'Python' (рядок програми #2), то змінної bar ці зміни не торкнулася.

За допомогою операції присвоєння відбувається копіювання значення виразу іншій змінній, хоча насправді, значення структурованого об’єкту, наприклад такого, як список, це є посилання на цей об’єкт. В наступному прикладі (рядок програми #1) відбувається присвоєння посилання на значення змінної foo новій змінній bar. Якщо відбуваються зміни в foo (рядок програми #2) то ці зміни також торкаються і bar.

 

>>> foo = ['Monty', 'Python']

>>> bar = foo #1

>>> foo[1] = 'Bodkin' #2

>>> bar

['Monty', 'Bodkin']







Рис.1: Операція присвоювання для списків в оперативній пам’яті. Два об’єкти foo та bar, типу список, посилаються на те саме місце в оперативній пам’яті. Зміна foo модифікує bar і навпаки.


Рядок bar = foo означає не копіювання вмісту змінної а тільки копіювання її посилання на відповідний об’єкт. Для глибшого розуміння розглянемо, яким чином списки збережені в оперативній пам’яті. На рис.1. показано, що список foo, це посилання на об’єкт збережений за адресою 3133. Коли відбувається операція присвоювання bar = foo , то копіюється це посилання на об’єкт 3133.

Розглянемо ще декілька прикладів. Створимо змінну empty і присвоємо їй значення пустого списку. В наступному рядку використаємо цю змінну декілька раз.

 

>>> empty = []

>>> nested = [empty, empty, empty]

>>> nested

[[], [], []]

>>> nested[1].append('Python')

>>> nested

[['Python'], ['Python'], ['Python']]




Бачимо, що зміна одного вкладеного списку привела до зміни і всіх інших. Це відбулося тому, що ці всі три елементи списку насправді є посиланнями на одне і те саме місце (на той самий список) .

Виконати самостійно. Створити список списків: nested = [[]] * 3. Змінити один з елементів списку і прослідкувати, як змінилися інші елементи списку. Використовувати вбудовану функцію id() для знаходження числового значення, яке ідентифікує об’єкт – ідентифікатора (адреса об’єкту) id(nested[0]), id(nested[1]), id(nested[2]).


В наступному прикладі показано, як присвоювання нового значення елементу списку не приводить до зміни його інших елементів:

 

>>> nested = [[]] * 3

>>> nested[1].append('Python')

>>> nested[1] = ['Monty']

>>> nested

[['Python'], ['Monty'], ['Python']]




Початковий список містить три посилання на єдиний пустий об’єкт типу список. В результаті модифікації цього об’єкту додаванням до нього 'Python' список містить ті самі три посилання але вже на єдиний об’єкт ['Python'] типу список. В подальшому відбувається перезаписування одного з цих посилань на посилання на новий об’єкт ['Monty']. У списку відбулася модифікація одного з трьох посилань на об’єкт ['Python'].

Потрібно чітко розрізняти модифікацію об’єкту через посилання на об’єкт і перезаписування посилання на об’єкт.

Для копіювання вмісту списку foo до нового списку bar можна записати bar = foo[:] . В цьому випадку відбувається копіювання посилань на об’єкт. Для копіювання структури без копіювання посилань на об’єкт потрібно скористатися функцією copy.deepcopy() модуля copy. (deepcopy будує новий складний об’єкт і тоді вставляє в нього копії об’єктів, які знайдені в оригіналі.)

 

>>> foo = ['Monty', 'Python']

>>> bar=foo

>>> id(foo)

13276784

>>> id(bar)

13276784

>>> foo = ['Monty', 'Python']

>>> bar=foo[:]

>>> id(foo)

13238144

>>> id(bar)

13258544

1.2 Порівняння


Python підтримує два способи порівняння. Оператор is перевіряє об’єкти на ідентичність. Створивши список з декількох копій одного і того самого об’єкту не складно переконатися, що елементи цього списку не тільки ідентичні, згідно ==, але і є одним і тим самим об’єктом:

 

>>> size = 5

>>> python = ['Python']

>>> snake_nest = [python] * size

>>> snake_nest[0] == snake_nest[1] == snake_nest[2] == snake_nest[3] == snake_nest[4]

True

>>> snake_nest[0] is snake_nest[1] is snake_nest[2] is snake_nest[3] is snake_nest[4]

True

>>> [id(snake) for snake in snake_nest]

[13275984, 13275984, 13275984, 13275984, 13275984]




Якщо до цього списку додати новий такий самий елемент (['Python']) не складно переконатися, що об’єкти не є ідентичними:

 

>>> import random

>>> position = random.choice(range(size))

>>> snake_nest[position] = ['Python']

>>> snake_nest

[['Python'], ['Python'], ['Python'], ['Python'], ['Python']]

>>> snake_nest[0] == snake_nest[1] == snake_nest[2] == snake_nest[3] == snake_nest[4]

^ True

>>> snake_nest[0] is snake_nest[1] is snake_nest[2] is snake_nest[3] is snake_nest[4]

False

>>> [id(snake) for snake in snake_nest]

[13293328, 13275744, 13275744, 13275744, 13275744]




Використовуючи функцію id() можна легко зрозуміти відмінності між об’єктами і побачити що елементи списку не є ідентичними - списки мають різні ідентифікатори:

 

>>> [id(snake) for snake in snake_nest]

[13293328, 13275744, 13275744, 13275744, 13275744]



^

1.3 Умовні твердження(висловлювання)


В частині умов if твердження, не пусті стрічки вважаються «true», а пусті стрічки чи списки вважаються «false» і не обробляються.

 

>>> mixed = ['cat', '', ['dog'], []]

>>> for element in mixed:

... if element:

... print element

...

cat

['dog']




Тому, не потрібно використовувати додаткову перевірку if len(element) > 0: в умові.

Для пояснення відмінностей між використанням if...elif та використання декількох if тверджень розглянемо наступний приклад:

 

>>> animals = ['cat', 'dog']

>>> if 'cat' in animals:

... print 1

... elif 'dog' in animals:

... print 2

...

1




Якщо if вираз твердження задовольняється то, Python ніколи не буде робити спроби перевірити чи справджується elif вираз. На екран «2» ніколи не буде виведено. Навпаки, якщо замінити elif на if, на екран буде виведено і «1» і «2». elif вираз потенційно є більш інформативний ніж простий if вираз; коли він справджується то це означає не тільки те що умова задовольняється але і те, що умова if виразу не справджується.

Вбудовані функції all() та any() можуть бути застосовані до списку або іншої послідовності для перевірки, чи всі, або будь-який з елементів задовольняють умову:

 

>>> sent = ['No', 'good', 'fish', 'goes', 'anywhere', 'without', 'a', 'porpoise', '.']

>>> all(len(w) > 4 for w in sent)

^ False

>>> any(len(w) > 4 for w in sent)

True



  1   2   3   4   5



Схожі:




База даних захищена авторським правом ©lib.exdat.com
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації