4714

Основи структурного програмування мовою Python

Лабораторная работа

Информатика, кибернетика и программирование

Мета робота Вивчити основи структурного програмування мовою Python, повторити та закріпити матеріал, пройдений у попередніх лабораторних роботах, покращити загальні навички програмування. Короткі теоретичні відомості Присвоювання...

Украинкский

2012-11-25

127.5 KB

17 чел.

Мета робота

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

Короткі теоретичні відомості

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

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

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

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

Порівняння

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

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

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

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

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

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

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

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

Операції над послідовностями різних типів

Елементи послідовності s можна обробляти почергово (здійснювати над ними ітерації, ітерувати) різними способами, основні з яких, наведено у таблиці 1.

Способи ітерування елементів послідовностей    Таблиця 1:

Вираз Python

Пояснення

for item in s

Проітерувати елементи s

for item in sorted(s)

Проітерувати впорядковані елементи s 

for item in set(s)

Проітерувати унікальні елементи s

for item in reversed(s)

Проітерувати зворотньо впорядковані елементи s

for item in set(s).difference(t)

Проітерувати елементи s, які не входять в t

for item in random.shuffle(s)

Проітерувати випадково впорядковані елементи s

Послідовності різних типів можна перетворювати між собою. Наприклад, tuple(s) – перетворення послідовності будь-якого типу в кортеж, list(s) – перетворення послідовності будь-якого типу в список. Для перетворення списку стрічок в єдину стрічку потрібно використовувати функцію join(), наприклад, ':'.join(words).

Деякі інші об’єкти, такі як  FreqDist, також можуть бути перетворені в послідовність, використовуючи list(), а також їх можна й ітерувати.

Генерація виразів

Використання list comprehensions дозволяє отримувати компактний та зручний для читання текст програми. Наприклад, наступний фрагмент програми для токенізації та нормалізації тексту:

 

>>> text = '''"When I use a word," Humpty Dumpty said in rather a scornful tone,

... "it means just what I choose it to mean - neither more nor less."'''

>>> [w.lower() for w in nltk.word_tokenize(text)]

['"', 'when', 'i', 'use', 'a', 'word', ',', '"', 'humpty', 'dumpty', 'said', ...]

Функції, як основа структурного програмування

Функції забезпечують ефективний спосіб збереження та повторного використання частин програм. Наприклад, припустимо, що існує необхідність часто читати тексти з HTML файлу. Це потребує виконання певної послідовності кроків: відкриття файлу, читання, нормалізація, видалення HTML розмітки. Можна зібрати ці кроки у функцію get_text().

 

import re

def get_text(file):

   """Read text from a file, normalizing whitespace and stripping HTML markup."""

   text = open(file).read()

   text = re.sub('\s+', ' ', text)

   text = re.sub(r'<.*?>', ' ', text)

   return text

Тепер, в будь-який момент, можна отримати текст з HTML файлу викликавши функцію get_text() вказавши назву файлу, як її аргумент. Функція повертає стрічку, значення, якої можна присвоїти будь-якій змінній, наприклад: contents = get_text("test.html"). При створенні функції важливе значення має вибір назви функції, що дозволяє зробити програму більш читабельною. У випадку попереднього прикладу, кожен раз коли програма повинна читати текст, немає потреби засмічувати текст основної програми чотирма рядками , потрібно тільки викликати функцію get_text (). Назва цієї функції має певну «семантичну інтерпретацію» і допомагає відразу зрозуміти що програма робить.

Функції дозволяють не тільки повторно використовувати текст частини програми та підвищують читабельність програми але  також підвищують достовірність тексту програми. Коли використовується текст програми, який вже попередньо розроблений і перевірений, то можна сподіватися що він працює правильно. Зменшується імовірність помилки та пропуску важливого кроку роботи програми.

  (my_sort3()).

 

>>> def my_sort1(mylist):      # good: modifies its argument, no return value

...    mylist.sort()

>>> def my_sort2(mylist):      # good: doesn't touch its argument, returns value

...    return sorted(mylist)

>>> def my_sort3(mylist):      # bad: modifies its argument and also returns it

...    mylist.sort()

...    return mylist


Виконання індивідуального завдання

  1.  Знайти в Python's help додаткову інформацію про послідовності. В інтерпретаторі, набрати по черзі help(str), help(list), та help(tuple). На екрані буде відображено повний список функцій властивих кожному з типів. Деякі функції мають спеціальні імена з подвійними підкреслюваннями. Кожній такій функції відповідає і інший запис показаний  в документації. Наприклад x.__getitem__(y) відповідає x[y].

  1.  Знайти три операції, які можна здійснювати і зі списками та із кортежами. Знайти три операції, які не можна здійснювати над кортежами.

Аналогічно до списків та стрічок, елементи кортежів можуть бути проіндексовані (#2), до них можна доступитися за допомогою зрізів (#3) та визначити кількість елементів (#4).

 

>>> t = 'walk', 'fem', 3 #1

>>> t

('walk', 'fem', 3)

>>> t[0] #2

'walk'

>>> t[1:] #3

('fem', 3)

>>> len(t) #4

Операції, які не можна здійснювати над кортежами:

t[0]=’run’

t.split()

t.append(‘new’)

  1.  Яким чином можна створити кортеж з одного елемента. Продемонструвати два різні способи.

>>> word='house',

>>> word

('house',)

>>>

Пустий кортеж створюється за допомогою пустих дужок (t=()). 

>>> t=()

>>> type(t)

<type 'tuple'>

>>>

Функція tuple(s) – перетворення послідовності будь-якого типу в кортеж

4.  Створити список words = ['is', 'NLP', 'fun', '?']. Використовуючи операції присвоювання подібні до words[1] = words[2] та тимчасову змінну  tmp перетворити цей список в список ['NLP', 'is', 'fun', '!']. Здійснити аналогічні перетворення використовуючи присвоювання в кортежах.

>>> word = ['is', 'NLP', 'fun', '?']

>>> bar='!'

>>> foo=bar

>>> bar

'!'

>>> (word[0], word[1], word[3])=(word[1],word[0],bar)

>>> word

['NLP', 'is', 'fun', '!']

>>>

>>> word = ['is', 'NLP', 'fun', '?']

>>> bar='!'

>>> foo=bar

>>> bar

'!'

>>> tmp=word[1]

>>> word[1]=word[0]

>>> word[0]=tmp

>>> word[3]=bar

>>> word

['NLP', 'is', 'fun', '!']

  1.  Прочитати про вбудовану функцію здійснення порівнянь cmp, набравши help(cmp). Продемонструвати чим поведінка цієї функції відрізняється від поведінки операторів порівняння.

>>> help(cmp)

Help on built-in function cmp in module __builtin__:

cmp(...)

   cmp(x, y) -> integer

   

   Return negative if x<y, zero if x==y, positive if x>y.

>>>

>>> 'x'<'y'

True

>>> 'x'=='y'

False

>>> 'x'>'y'

False

>>>

  1.  Написати програму для коректного виділення в тексті n-грамів з врахуванням граничних випадків: n = 1, та n = len(sent)?

>>> sentence=['The', 'snow', 'is', 'falling', 'slowly']

>>> n=1

>>> [sentence[i:i+n] for i in range(len(sentence)-n+1)]

[['The'], ['snow'], ['is'], ['falling'], ['slowly']]

>>> n=len(sentence)

>>> [sentence[i:i+n] for i in range(len(sentence)-n+1)]

[['The', 'snow', 'is', 'falling', 'slowly']]

>>>

7. Використати оператори нерівності для порівняння стрічок, наприклад. 'Monty' < 'Python'. Що станеться, якщо виконати  'Z' < 'a'? Порівняти стрічки,як мають однаковий префікс, наприклад 'Monty' < 'Montague'. Спробувати порівняти структуровані об’єкти ,наприклад. ('Monty', 1) < ('Monty', 2). Чи отримали очікувані результати?

>>> 'Monty'<'Python'

True

>>> 'Z'<'a'

True

>>> 'Monty' < 'Montague'

False

>>> ('Monty', 1) < ('Monty', 2)

True

  1.  Написати програму видалення пробілів на початку і в кінці стрічки та для видалення зайвих пробілів між словами. Використовувати split() та join(). Оформити у вигляді функції. Функція повинна містити повну стрічку документування.

>>> sent='  Who is on duty today?'

>>> a=sent.split()

>>> a

['Who', 'is', 'on', 'duty', 'today?']

>>> def delete_space(x):

b=' '.join(x)

return b

>>> delete_space(a)

'Who is on duty today?'

>>>

  1.  Написати програму видалення пробілів на початку і в кінці стрічки та для видалення зайвих пробілів між словами. Використовувати re.sub() . Оформити у вигляді функції. Функція повинна містити повну стрічку документування.

>>> import re, nltk

>>> sent='  Who is on duty today?   '

>>> def delete_extraspaces(str):

x= re.sub('\s+',' ',str)

 y= re.sub('^\s+','',x)

z= re.sub('\s+$','',y)

 return z

>>> delete_extraspaces(sent)

'Who is on duty today?'

  1.  Написати програму сортування слів за їх довжиною. Визначити допоміжну функцію cmp_len, яка буде використовувати функцію cmp для порівняння довжин слів. Функція повинна містити повну стрічку документування.

>>> sent='The sun is shining brightly'

>>> a=sent.split()

>>> a

['The', 'sun', 'is', 'shining', 'brightly']

>>> def sort(w):

c = sorted(w, lambda x, y: cmp(len(x), len(y)))

return c

>>> sort(a)

['is', 'The', 'sun', 'shining', 'brightly']

ВИСНОВКИ

Під час виконання даної лабораторної роботи я вивчила та засвоїла на практиці основи структурного програмування на мові Python, повторила та закріпила знання, отримані в попередніх лабораторних роботах.


 

А также другие работы, которые могут Вас заинтересовать

83456. Унітарні та складні держави 37.87 KB
  Федерація це союзна держава субєкти якої володіють значною самостійністю у внутріїпніх справах а зовнішні зносини віднесені до компетенції центральної влади. Субєкти федерації не мають права на зовнішньополітичні зносини але можуть підтримувати економічні культурні наукові стосунки з іншими державами. Субєктом міжнародного права виступає федерація в цілому. За принципом виділення субєктів федерації поділяються на: національні побудовані за національним принципом виділення субєктів федерації наприклад Індія; територіальні ...
83457. Правосубєктність націй і народів, що борються за національне визволення 33.91 KB
  Нації і народи, що борються за національне визволення, як субєкт міжнародного права набули актуальності в 60-ті роках XX століття в період розпаду колоніальної системи. Народ, який в процесі визвольної боротьби набуває елементи державності, створює органи.
83458. Міжнародна правосуб’єктність міжнародних організацій 37.25 KB
  Міжнародна міжурядова організація може бути визначена як формальна структура створена в рамках міжнародного договору укладеного між державамичленами організації яка має конкретну ціль що проявляється у спільному інтересі державчленів. В деяких випадках членами міжнародних організацій крім держав можуть бути також інші міжнародні організації та певні автономні утворення. На відміну від міжнародних організацій членами яких виключно або головним чином є держави і які зазвичай іменуються міжнародними міжурядовими організаціями...
83459. Міжнародна правосуб’єкгність Міжнародного Комітету Червоного Хреста та Червоного Півмісяця 32.68 KB
  Наприклад Міжнародний Рух Червоного Хреста та Червоного Півмісяця є організацією яку важко однозначно віднести як до одної так і до іншої групи. Складається вона з трьох складових: Міжнародного Комітету Червоного Хреста членами якого є фізичні особи громадяни Швейцарії; Ліги Товариств Червоного Хреста та Червоного Півмісяця членами яких є національні товариства Червоного Хреста та Червоного Півмісяця; Національні товариства в кількості понад 120ти. Незважаючи на це держави співпрацюють з Міжнародним Рухом Червоного Хреста та...
83460. Міжнародна правосубєктність Євросоюзу 38.14 KB
  До підписання Лісабонських договорів про Євросоюз і функціонування Євросоюзу питання міжнародної правосубєктності ЄС не були врегульовані. Міжнародну правосубєктність мали тільки європейські співтовариства. Відповідні повноваження Європейського співтовариства були визначені в установчих документах та розвинуті практикою Суду
83461. Міжнародна правосубєктність державоподібних утворень 37.76 KB
  Ватикан це містодержава яка є резиденцією центра католицької церкви Святого Престолу. Святий Престол слід розуміти як сукупність центральних органів з Папою Римським на чолі в свою чергу містодержава Ватикан є геополітичним формуванням створеним на підставі договору між Святим Престолом та Італією від 11 лютого 1929 р. Згідно з цим договором Ватиканська держава є власністю Святого Престолу який здійснює над нею виключну та необмеженою владу та суверенну юрисдикцію. Показово що як член Міжнародної агенції з атомної енергії Ватикан...
83462. Проблема міжнародної правосуб’єктності фізичної особи 37.01 KB
  В міжнародному праві почали формуватися норми з яких витікають права та обовязки адресовані безпосередньо фізичним особам. Крім того прибічники визнання міжнародної правосубєктності фізичної особи підкреслюють що проявом міжнародної субєктності останньої є не тільки володіння правами та обовязками що витікають безпосередньо з міжнародного права але також судовий захист цих правяк і можливість виконання зобовязань причому через міжнародні органи. Проте у вітчизняній доктрині міжнародного права заперечується визнання статусу...
83463. Поняття визнання в міжнародному праві 35.51 KB
  Таке визначення визнання вказує поперше на те що це є акт політичний який залежить від політичних інтересів держави що визнає та подруге це є акт правовий тобто такий що тягне за собою правові наслідки встановлення дипломатичних консульських відносинукладення договорів та ін. Інститут визнання відноситься відповідно дестинаторами визнання є до визнання державиуряду повсталої сторони нації що бореться за свою незалежність. В ширшому розумінні визнання відноситься до будьякої правової ситуації наприклад визнання...
83464. Теорії визнання 36.65 KB
  Згідно з конститутивною теорією визнання лише визнання породжує відповідні правові наслідки та надає відповідні правові консти туюючі правовстановлюючі якості дестинатору визнання: державі міжнародну правосубєктністьуряду здатність представляти державу у міжнародних відносинах. Відповідно без визнання держава не може вважатися субєктом міжнародного права. Серед недоліків конститутивної теорії визнання потрібно зазначити поперше відсутність визначеної кількості актів визнання необхідних для надання дестинатору зазначених...