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, повторила та закріпила знання, отримані в попередніх лабораторних роботах.


 

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

32388. Внимание 15.34 KB
  Успешность освоения систематизированных знаний и выполнение той или иной деятельности зависит в значительной степени от уровня развития и индивидуальных особенностей внимания человека. Наличие внимания является обязательным условием обеспечивающим успешность протекания каждого психического процесса. В качестве обоснования этой точки зрения указывается на то что в мозге человека можно обнаружить и выделить особого рода нервные структуры связанные именно с процессом внимания. Функции внимания: Отбор значимых воздействий которые...
32389. Содержание, задачи, функции, методы, основные направления и этические принципы работы практического психолога в системе образования 13.8 KB
  Осуществление работы по направлениям личности. Методы работы: Индивидуальная форма работы для детей игра и рисунок. Групповая форма работы для детей ролевые игры и психодрама.
32390. Общие представления о мышлении 16.24 KB
  Физиологические основы мышления выявить и исследовать достаточно трудно это объяснятся той специфической ролью которую мышление играет в психологической деятельности человека. Следовательно для функционирования мышления необходимы отделы коры головного мозга отвечающие за познавательные процессы. Установлено также что особую значимую роль для процессов мышления играет лобная доля и речевые центры коры головного мозга. Функции мышления: Понимание решение проблемы и задачи целеобразование рефлексия деятельность человеческого...
32391. Особенности развития личности ребенка на различных возрастных этапах 14.83 KB
  Внутри этого вида деятельности формируется новая ведущая деятельность характерная для следующего этапа возрастного развития. ведущая деятельность способствует появлению характерных только для этого возраста качественных особенностей. Ведущая деятельность: непосредственно эмоциональное общение внутри и на фоне которой формируются ориентировочные и сенсомоторные манипулятивные действия т. Ведущая деятельность: предметноманипулятивная в процессе которой ребенок овладевает общественными выработанными способами действий с предметами в...
32392. Метод эксперимента 15.17 KB
  Отличительные признаки эксперимента: Исследователь не дожидается проявлений интересующих его психических свойств а сам создает условия чтобы вызвать их у испытуемых. В эксперименте обязателен строгий учет и регистрация условий протекания исследования. Эксперимент может быть повторен другими исследователями и в другое время что позволяет проверить результаты исследования.
32393. Психодиагностика как наука. История, предмет и методы психодиагностики. Классификация методов психодиагностического исследования 16.22 KB
  Задачи психодиагностики: Разработка теоретических принципов оценки и измерения индивидуальных психологических свойств человека. Этапы становления психодиагностики: Донаучный до начала 19 века Стихийное использование некоторых заданий для определения индивидуальных особенностей человека. Пифагор допускал в свою школу лишь тех кто проходил череду испытаний смех и походка считались отражением характера человека. Экспериментальная психология накопила огромное количество методик для исследования психических функций человека многие из...
32394. Представление о личности в отечественной и зарубежной психологии. Личность и индивидуальность 14.43 KB
  Личность и индивидуальность. Личность специфическое человеческое образование производится общественными отношениями в которых индивид вступает в своей деятельности. Личность понятие социальное возникает в результате культурного и социального развития есть своя позиция жизни к которой пришел в итоге большой сознательной работы; самостоятельность мысли; глубина и богатство связей с миром с другими людьми; разрыв этих связей самоизоляция опустошают. Личность как субъект межличностных социальных отношений и сознательной деятельности...
32395. Взаимоотношение детей со сверстниками на различных возрастных этапах 13.05 KB
  Положительные личностные качества становятся одним из мотивов выбора детьми друг друга для совместной деятельности и общения. Стремление к сверстникам жажда общения с ними делают группу сверстников чрезвычайно ценной и привлекательной. В подростковом и юношеском возрасте психология общения строится на основе противоречивого переплетения двух потребностей: обособления приватизации и принадлежности аффиляции. Специфика общения подростков преодоление коммуникативных трудностей застенчивость.
32396. История и характеристика тестов интеллекта 14.22 KB
  Общие признаки интеллектуальных тестов: Носят эмпирический характер отсутствует базисная теория интеллекта. Тесты интеллекта являются одними из наиболее распространенных в психодиагностике и применяются для выявления уровня развития отдельных психических функций комплексов или уровня развития интеллекта в целом: Тесты интеллекта направлены на установление уровня интеллектуального развития человека метрические шкалы БинеСимона интеллектуальные шкалы Векслера. Тесты специальных способностей предназначены для измерения уровня...