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, на екран буде виведено і «1» і «2». 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 |
Виконання індивідуального завдання
Аналогічно до списків та стрічок, елементи кортежів можуть бути проіндексовані (#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)
>>> 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', '!']
>>> 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
>>>
>>> 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
>>> 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?'
>>>
>>> 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?'
>>> 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, повторила та закріпила знання, отримані в попередніх лабораторних роботах.
А также другие работы, которые могут Вас заинтересовать | |||
5312. | Мультиплетность спектров и спин электрона | 159.5 KB | |
Мультиплетность спектров и спин электрона Исследование спектров щелочных металлов при помощи приборов с большой разрешающей силой показало, что каждая линия этих спектров является двойной (дублет). Так, например, характерная для натрия желтая линия... | |||
5313. | Атом водорода | 198.5 KB | |
Атом водорода В атоме водорода или водородоподобном ионе потенциальная энергия электрона равна где Ze заряд ядра, r расстояние между ядром и электроном. Уравнение Шредингера имеет в этом случае вид Поскольку п... | |||
5314. | Изучение рынка земельных участков и выявления его роли в формировании экономической системы | 294 KB | |
Актуальность изучения земельного рынка обусловлена тем фактором, что Россия располагает огромными земельными ресурсами, но это национальное богатство страны используется крайне неэффективно. Начатая в 1991 году земельная реформа не доведена... | |||
5315. | Корпускулярно волновой дуализм | 82 KB | |
Корпускулярно волновой дуализм Экспериментальные факты свидетельствуют, что в ряде явлений свет проявляет сугубо волновые свойства (дифракция, интерференция, поляризация, дисперсия), а в ряде – чисто корпускулярные (фотоэффект, эффект Комптона)... | |||
5316. | Политический режим в современной России (2000-2008) | 34 KB | |
Новый политический режим (2000-2008), связанный с именем нового президента, стал формироваться после президентских выборов 2000 г. Но еще до выборов стал проявляться политический стиль нового лидер... | |||
5317. | Проектирование трёхфазного асинхронного двигателя с короткозамкнутым ротором серии 4А | 1.3 MB | |
Электрические машины имеют чрезвычайно широкое распространение. Они применяются в различных отраслях промышленности, сельского хозяйства, в энергетике, на транспорте, в авиации, в морском и речном флоте, медицине, быту и т.д. Нет ни одной о... | |||
5318. | Международное инвестирование. Понятие международных корпораций | 71 KB | |
На рубеже XX-XXI веков развитие национальных экономик и их взаимоотношения (политические, экономические и др.) приобретают совершенно другое качество. Это обусловлено тем, что современное развитие мировой экономики проходит под воздействие... | |||
5319. | Фотоны и фотоэффект. Эффект Комптона | 100 KB | |
Фотоны. В теории равновесного излучения абсолютно черного тела Планка вводится понятие фотона - кванта света или порции излучения, которая может поглощаться или излучаться только целиком. С другой стороны, по средствам фотонов осуществляется... | |||
5320. | Проектирование мехатронных систем | 1.98 MB | |
Анализ и синтез кинематических параметров мехатронных систем При управлении мехатронным модулем с вращательной кинематической парой часто используется привод поступательного действия, в частности, электрогидравлический с гидроцилиндрами. Целесообраз... | |||