4712

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

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

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

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

Украинкский

2012-11-25

72 KB

21 чел.

Мета робота

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

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

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

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

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

 Серед послідовностей, в попередніх прикладах, використовувалися наступні: стрічки, списки та кортежі. Змінна, тип якої – кортеж, створюється за допомогою ком (#1) і переважно обмежується дужками. В попередніх лабораторних роботах кортежі використовувалися для представлення пар значень (елементів послідовності з двох членів). Зазвичай, кортежі можуть містити будь-яку кількість елементів та членів.

 Кортежі створюються за допомогою ком (оператор - кома). Для створення кортежу, який містить єдиний елемент 'snark'  , кома ставиться безпосередньо після цього елементу 'snark',.  Пустий кортеж створюється за допомогою пустих дужок (t=()).

Способи ітерування елементів послідовностей    Таблиця 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


Індивідуальне завдання варіант 9:

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

class str(basestring)

|  str(object) -> string

|  Return a nice string representation of the object.

|  If the argument is a string, the return value is the same object.

|  Method resolution order:

|      str

|      basestring

|      object

|  Methods defined here:

|  __add__(...)

|      x.__add__(y) <==> x+y

class list(object)

|  list() -> new empty list

|  list(iterable) -> new list initialized from iterable's items

|  Methods defined here:

|  __add__(...)

|      x.__add__(y) <==> x+y

class tuple(object)

|  tuple() -> empty tuple

|  tuple(iterable) -> tuple initialized from iterable's items

|  

|  If the argument is a tuple, the return value is the same object.

|  

|  Methods defined here:

|  

|  __add__(...)

|      x.__add__(y) <==> x+y

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

Спільні:

|  __add__(...)

|      x.__add__(y) <==> x+y

|  __contains__(...)

|      x.__contains__(y) <==> y in x

|  __eq__(...)

|      x.__eq__(y) <==> x==y 

Не можна з кортежами:

|  __imul__(...)

|      x.__imul__(y) <==> x*=y

|  __delitem__(...)

|      x.__delitem__(y) <==> del x[y]

|  __iadd__(...)

|      x.__iadd__(y) <==> x+=y

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

>>> words = ['I']

>>> tags = ['noun']

>>> zip(words, tags)

[('I', 'noun')]

>>> list(enumerate(words))

[(0, 'I')]

>>> pair = (6, 'turned')

>>> pair

(6, 'turned')

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

Список:

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

>>> tmp = words[0]

>>> words[0] = words[1]

>>> words[1] = tmp

>>> words[3] = '!'

>>> words

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

Кортежах:

>>> words = [(1,'is'),(2,'NLP'),(3,'fun'),(4,'?')]

>>> tmp = words[0]

>>> words[0] = words[1]

>>> words[1] = tmp

>>> words[3] = '!'

>>> words

[(2, 'NLP'), (1, 'is'), (3, 'fun'), '!']

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

cmp(...)

   cmp(x, y) -> integer

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

>>> x = 1

>>> y = 2

>>> cmp(x, y)

-1

>>> x = 0.5

>>> cmp(x, y)

-1

>>> x = "hello"

>>> y = "HELL"

>>> cmp(x,y)

1

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

>>> sent = ['The', 'world', 'got', 'lost', 'in', 'snow']

>>> n = 3

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

[['The', 'world', 'got'], ['world', 'got', 'lost'], ['got', 'lost', 'in'], ['lost', 'in', 'snow']]

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

>>> 'Monty' < 'Python'

True

>>> 'Z' < 'a'

True

>>> 'Monty' < 'Montague'

False

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

True

>>> cmp('Z','a')

-1

>>> cmp('Monty','Montague')

1

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

-1

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

>>> text = " Hello  how are  you? "

>>> def clean_spaces(text):

"""Deletes the first and the last space in text and double space into one space."""

tmp = text.split();

tmp = ' '.join(tmp);

return tmp

>>> clean_spaces(text)

'Hello how are you?'

>>> help(clean_spaces)

Help on function clean_spaces in module __main__:

clean_spaces(text)

   Deletes the first and the last space in text and double space into one space.

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

>>> import re

>>> text = " Hello  how are  you? "

>>> def clean_spaces(text):

"""Deletes the first and the last space in text and double space into one space."""

tmp = re.sub("^\s+","",text);

       tmp = re.sub("\s+$","",tmp);

       tmp = re.sub("\s{2}"," ",tmp);

       return tmp

>>> clean_spaces(text)

'Hello how are you?'

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

>>> def cmp_len(word1,word2):

"""Find out which one is longer."""

return cmp(len(word1),len(word2));

>>> def sort_by_len(input_list):

"""Sort list by length."""

       while cmp_len(input_list[0],input_list[1])==-1:

  for i in range(len(input_list)-1):

     if cmp_len(input_list[i],input_list[i+1])==-1: tmp = input_list[i]; input_list[i]=input_list[i+1];input_list[i+1]=tmp;

   elif cmp_len(input_list[i],input_list[i+1])==1: tmp = input_list[i]; input_list[i]=input_list[i+1];input_list[i+1]=tmp;

   

>>> listout = ['ds','aaa','dddd','dsc']

>>> sort_by_len(listout)

>>> listout

['dddd', 'aaa', 'dsc', 'ds']


Висновок:

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


 

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

79065. Правовое положение римских граждан. Установление формально равной правоспособности свободных в области частного права. Понятие дееспособности. Лица недееспособные и частично дееспособные 23.98 KB
  Установление формально равной правоспособности свободных в области частного права. в случаях захвата римского гражданина во власть врагов или по крайней мере недружественного народа впрочем в случае последующего возвращения на римскую территорию такое лицо восстанавливалось во всех правах; это называлось ius postliminii. Правоспособность римского гражданства в области частного права слагалась из двух основных элементов: ius conubii т. права вступать в законный брак при котором дети получали права римского гражданства а отцу принадлежала...
79066. Прекращение обязательств. Новация. Зачет. Невозможность исполнения обязательства 22.39 KB
  Невозможность исполнения обязательства. Последнее возможно лишь с согласия кредитора; место исполнения соответствует месту определенному в договоре; исполнение в срок указанный в договоре.; в оба требования должны быть такими по которым срок исполнения уже наступил или определен моментом востребования. Просрочка исполнения усиливает ответственность должника который должен впредь отвечать не только соответственно прямому содержанию обязательства но и обязывался к возмещению неполученных доходов кредитора на него возлагался случайный...
79067. Развитие уголовного права в Риме в период империи 19.9 KB
  Характерной тенденцией развития уголовного права данного периода является то что ряд частных деликтов постепенно становятся уголовно наказуемыми включаются в категорию преступлений crimen publicum. Появляется также большое число новых преступлений в том числе таких которые рассматриваются как опасное посягательство на устои государства. В числе этих преступлений заговор с целью свержения императора покушение на его жизнь или жизнь его чиновников непризнание религиозного культа императора и т. К числу преступлений непосредственно...
79068. Развитие уголовного права в Риме в республиканский период. Виды преступлений. Виды наказаний. Уголовный суд и процесс 20.41 KB
  Благодаря этому обстоятельству приговор магистрата малопомалу теряет свое значение и собственными органами уголовного суда делаются comiti centurit если дело идет о cpite и tribut если дело идет об nquisitio pecuni. Все производство у магистрата приобретает характер предварительного следствия. Производство перед магистратом в уголовных делах по своему смыслу отнюдь не соответствует производству in jure в процессе гражданском: здесь магистрат ничего не разбирает и ничего не решает меж тем как в уголовном процессе суд магистрата имеет...
79069. Сервитуты. Понятие и виды. Хозяйственное значение и содержание сервитутов. Приобретение и утрата сервитутов. Защита сервитутного права 27.56 KB
  С ростом городов с увеличением скученности городских построек собственники городских земельных участков стали нуждаться в правовом средстве с помощью которого можно было бы предупредить полное затемнение одного участка постройкой на соседнем участке и т. Прочность удовлетворения потребности посредством такой правовой формы состояла в вещном характере сервитутного права: предметом сервитутного права являлся сам земельный участок а не действие определенного лица обязавшегося допускать пользование его земельным участком со стороны соседа....
79070. Содержание и виды договоров. Условия действительности договора. Недействительность договора (сделки). Договоры противозаконные и противоречащие добрым нравам. Пороки воли 24.85 KB
  Со временем договорами стали также считаться неформальные соглашения лиц. Такие соглашения именовались пактами и, в отличие от контрактов, первоначально не пользовались исковой защитой, так как заключались без соблюдения установленной процедуры.
79071. Стороны в обязательстве. Замена лиц в обязательстве. Обязательства с несколькими кредиторами или должниками 28.95 KB
  Обязательства с несколькими кредиторами или должниками. Оно рассматривалось как строго личная связь между кредитором и должником несмотря на имущественный характер содержания обязательства.С установлением обязательства связывались определенные юридические последствия исключительно для тех лиц которые его установили. Понимание обязательства как строго личного отношения между сторонами приводило также к тому что обязательство первоначально признавалось абсолютно непередаваемым ни на активной стороне переход права требования от кредитора к...
79072. Уголовное право Рима в древнейший период. Виды деликтов 19.71 KB
  Многие из таких частных деликтов известных Законам XII таблиц стали рассматриваться как преступления в последующем. преступления которые наказывались от имени римского народа а взыскания по ним шли не частным лицам а государству. К ним относились прежде всего преступления против республики. В зависимости от характера преступления смертная казнь принимала различные формы: отсечение головы утопление распятие сбрасывание с Тарпейской скалы и т.
79073. Формы гражданского процесса 28.39 KB
  Характерной особенностью римского гражданского процесса в течение республиканского периода и периода принципата было деление процесса на две стадии производства из которых первая называлась вторая judidum. Римская же первая стадия процесса приводила к окончанию дела только в случае признания иска ответчиком а такой вопрос как видно из открытых в 1933 году новых фрагментов Институций Гая прямо ставился истцом; требую чтобы ты сказал да или нет.Какими потребностями было вызвано деление римского процесса на две стадии и какие цели оно...