Тема 4. Вбудовані типи даних та їх опрацювання


4.1. Списки, стеки, черги

4.1.1. Структура списків і операції над ними

4.1.2. Функції і методи опрацювання списків

4.1.1-2 Списки

More presentations from Galya

4.1.3. Стек і черга

4.1-3 Стек Черга

More presentations from Galya

4.1.4. Багатовимірні списки

4.1.5. Приклади програм опрацювання списків

4.1.4-5 Списки Задачі

More presentations from Galya

Приклад 5.
У списку [27, 3, 12, 22, 37, 8] знайти максимальний елемент, вилучити елемент на другій позиції, упорядкувати новий список у порядку збільшення значень його елементів зі збереженням
попереднього списку, вставити в нього на четверту позицію число 5, потім замінити значення першого елемента на число 10.

Приклад 6.
Дано два списки: ["Python розробив", "1991"] і ["Гвидо ван"]. Розробити програму, за допомогою якої отримується рядок: Мову Python розробив у 1991 році Гвидо Ван Россум.

Приклад 7.
У послідовності [4, 6, 13, 9, 5, 16, 11] знайти числа, більші 6, збільшити їх удвічі, вивести на екран і обчислити їх суму.

Завдання для самостійного виконання

  1. Дано список [13, 19, 11, 7, 18]. Вилучте елемент на першій позиції і після цього знайти максимальний елемент.
  2. Дано список міст України ["Херсон", "Житомир", "Ужгород", "Харків"]. Уставте місто Луцьк на другу позицію і після цього відсортуйте список.
  3. Дано список [9, 2, 5, 6]. Замініть число на першій позиції числом 12. Відсортуйте новий список із збереженням старого. 
  4. Дано список ["В. Глушков", "вчений України"]. Внесіть у нього зміни, щоб отримати такий список ["В. Глушков — великий", "вчений України"]. Перетворіть список на рядок.
  5. Дано два списки: ["Мова", "Pascal"] і ["— це мова", "процедурного програмування"]. Об’єднайте списки в один і перетворіть його на рядок.
  6. Дано список [5, 7, 8, 12, 4]. Обчислити суму елементів, значення яких більші 5.

4.2. Кортежі, діапазони, множини

4.2.1-2. Кортежі. Діапазони

Кортеж — це сукупність незмінних об’єктів будь-якого типу в круглих дужках (або без них), які відокремлюються один від одного комою.
Кортежі схожі на списки, але відрізняються від них тим, що кортежі є незмінними послідовностями і замість квадратних дужок застосовуються звичайні дужки.

4.2.3. Множини

4.2-3. Множини

More presentations from Galya

Приклад 11.
Створити кортеж з елементами: 14, 107, Київ, Театральна, 21. Визначити елемент, розташований на другій позиції, елементи з нульової до другої позиції включно, кількість елементів,  дорівняних 107, і номер позиції, із якої починається елемент Театральна.

Діапазон — це незмінна послідовність цілих чисел з початковим, кінцевим значеннями і кроком їх зміни.
Для створення діапазону призначена функція range () такої структури: range ([початок,] кінець[, крок ])

Приклад 14.
Створити діапазон чисел від 3 до 17 з кроком 2. Перетворити діапазон у список і кортеж, викликати значення елемента на п’ятій позиції, визначити довжину діапазону та суму всіх елементів.

Множина — це неупорядкована колекція унікальних (тих, що не повторюються) об’єктів будь якого типу.
Існує два типи множин: змінна (set) і незмінна (frozenset ()).
Далі розглядається перший із них. Множина змінного типу створюється за допомогою вбудованої функції set, генераторів множин, літералів множин та інших.

Приклад 15.
Створити дві множини: 2, 4, 6, 8 і 10, 12, 14, 16. Перевірити, чи рівні ці множини. Об’єднати створені множини в одну й додати до неї число 18. Визначити довжину нової множини, перевірити, чи є в ній число 12 і знайти суму чисел другої початкової довжини.

Завдання для самостійного виконання

  1. Створити й вивести діапазон чисел від 5 до 15 із кроком 1. Перетворити діапазон у список і визначити його довжину.
  2. Створіть кортеж з елементами: 21, 16, "Прут", 16, "Псел", 16. Визначте кількість елементів, що дорівнюють 16, позицію, з якої починається елемент Псел, і зріз елементів із першої по третю позицію включно.
  3. Створіть кортеж, елементи якого мають такі значення: "Потяг", "слідує", "у", 5, "Запоріжжя о", 12.0. Визначте кількість елементів у кортежі й елемент на 3 позиції.
  4. Створіть дві множини. Елементи першої: 1, 2, 3; елементи другої: 2, 4, 6. Об’єднайте множини. Додайте до неї елемент 7.
  5. Створіть діапазон чисел від 12 до 28 із кроком 2. Перетворіть діапазон у кортеж. Обчисліть суму значень його елементів.
  6. Створіть дві множини з елементами: 5, 7, 8 і 12, 14, 16, 18. Визначте довжину кожної з них. Об’єднайте множини та обчисліть суму значень її елементів.

4.3. Словники. Функції, операції і методи опрацювання словників

4.3. Словники

More presentations from Galya

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

Сортування в Python

Символьні та рядкові величини в Python

Опорна вправа.

 Дано довільно рядок. Вивести перші його 6 символів, довдину, символи від середини рядка на 2 вліво до середини рядка на 2 вправо. Вивести символи, індекси яких дорівнюють 0 або кратні 3 (a[x:y:z] - де  x - початковий індекс , y - кінцевий індекс , z - крок зміни індексу). Перетворити рядок у список та відсортувати його.

a="програмування"
print("Дано рядок: ",a)
print("Перші 8 символів даного рядка : ",a[:8])
l=len(a)
print("Довжина даного рядка: ",l)
#індекс середини рядка l/2 може бути і дробовим числом, тому перетворюємо його на ціле
m=int(l/2-2) #індекси від середини рядка на 2 вліво / вправо
n=int(l/2+2)
print("Середина даного рядка: ",a[m:n])
print("Символи, індекси яких кратні 3 і 0: ")
print(a[0:l:3])
b=list(a)
print("Рядок перетворено у список літер: ")
print(b)
print("Відсортований список :")
print(sorted(b))

Результати: 

Дано рядок:  програмування
Перші 8 символів даного рядка :  програму
Довжина даного рядка:  13
Середина даного рядка:  раму
Символи, індекси яких кратні 3 і 0: 
пгмая
Рядок перетворено у список літер: 
['п', 'р', 'о', 'г', 'р', 'а', 'м', 'у', 'в', 'а', 'н', 'н', 'я']
Відсортований список :
['а', 'а', 'в', 'г', 'м', 'н', 'н', 'о', 'п', 'р', 'р', 'у', 'я']

Робота з файлами в Python

Етапи роботи з файлом:

  • відкриття файлу;
  • режим читання,
  • режим запису,
  • режим додавання даних.
  • робота з файлом;
  • закриття файлу.
     

У python відкрити файл можна за допомогою функції open з двома параметрами:

  • ім'я файлу (шлях до файлу);
  • режим відкриття файлу:

           «R» - відкрити на читання,
          «W» - відкрити на запис (якщо файл існує, його вміст видаляється),
          «A» - відкрити на додавання.

Порядкове зчитування даних із файла:

f = open('test.txt', 'r')
for line in f:
    print (line)
f.close()

Приклад запису у файл у 2 рядки, чи дописування у файл:

# Запис в файл
f = open('file.txt', 'w')
f.write('рядок1\n') #n -перенесення рядка
f.write('рядок2')
f.close() # Перевіряємо, чи записані дані
f = open('file.txt', 'r')
print (f.read())
f.close()

# Дописування в файл
f = open('file.txt', 'w')
f.write('Профільна ') 
f.write('інформатика')
f.close() # Перевіряємо, чи записані дані
f = open('file.txt', 'r')
print (f.read())
f.close()

# Читання файла
f = open('file.txt', 'r')
print(f.read())
f.close()

За замовчуванням метод read () читає дані послідовно по порядку, від початку і до кінця файлу. Для довільного доступу до файлу є функція seek: seek (offset [, whence]) offset-зміщення у байтах відносно початку файлу; whence-за замовчуванням дорівнює нулю, вказує на те, що зміщення береться щодо початку файлу

f = open("file.txt", 'w')
f.write('01234567890123456789')
f.seek(5)
f.write("\n") # Для запису даних у різних рядках
f.write('Молодці, майбутні програмісти!')
f.close()
f = open("file.txt")
print(f.read())

Порядкова робота з файлами

File.readline () - прочитати один рядок. Функція readline () без параметра читає весь рядок, наявність параметра вказує функції максимальне число символів рядка, яке буде прочитано. file.readlines () - прочитати всі рядки і повернути список рядків file.writelines () - записати рядки в файл

У 1 файлі записана інформація:"Читаємо файл і записуємо його вміст в другий файл.  Профільна інформатика" Зробимо зміни 1 рядка і запишемо інформацію у інший файл: "Це речення перенесено із file.txt. Профільна інформатика" 

#Читаємо файл і записуємо його вміст в другий файл
f = open("file.txt",'r')
lines = f.readlines()
f.close()
lines[0] ="Це речення перенесено із file.txt\n" # змінюємо 1 рядок
f = open("file2.txt",'w')
f.writelines(lines)
f.close()

Для закриття файлу є метод close (). Зазвичай файл закривається сам після того, як ви виходите з програми, але файли потрібно закривати вручну.

Занесені в рядок дані запишемо у файл, зчитаємо дані і виведемо їх в стовпчик

a = [1,6,3,4,5,2]
#Відкривання файлу для запису
f = open("text1.txt","w")
f.writelines("%s\n" % i for i in a)
#Відкривання файлу для читання
f=open("text1.txt","r")
print(open("text1.txt").read())
f.close()

Перші висновки. Читати вміст текстового файлу (виведення на екран)

1) f1 = "test.txt"
with open(f1, 'r') as filehandle:  
    filecontent = filehandle.read()
    print (filecontent)

2) f = open("test.txt","r")
print (f.read())

(якщо дані у файлі записані в окремих рядках):

Понеділок
Вівторок
Середа
Четвер
П'ятниця
Субота
Неділя     

або (якщо дані у файлі записані в 1 рядок через пропуск):

Понеділок Вівторок Середа Четвер П'ятниця Субота Неділя

Завдання. У текстовому файлі 1.txt записано розклад уроків на вівторок. Спосіб запису ( у рядок або у стовбчик) на власний розсуд. Прочитайте вміст цього фау та виведіть цей зміст на екран.

Приклад. Читати із текстового файлу дані числового чи рядкового типу, які записані в кілька рядків із заданою умовою виводу тільки деякої кількості цих рядків

from itertools import islice
# У файлі записано 7 рядків чисел
# Визначаємо ім'я файлу, з яким будемо працювати

filename = "test.txt"
# Визначаємо, скільки рядків маємо прочитати
k = 5
#Читання і виведення на екран рядків
with open(filename, 'r') as input_file:  
    lines_cache = islice(input_file, k)

    for current_line in lines_cache:
        print (current_line)  #Поточний рядок

Приклад. Дано текстовий файл із назвами днів тижня. Зчитати ці дні і записати у новий файл, додавши попередньо заголовок "Дні тижня".

path = "days.txt"
title = 'Дні тижня\n'
days_file = open(path,'r')
days = days_file.read()
new_path = "new_days.txt"
new_days = open(new_path,'w')
new_days.write(title)
print(title)
new_days.write(days)
print(days)
days_file.close()
new_days.close()

Дні тижня
Понеділок Вівторок Середа Четвер П'ятниця Субота Неділя

Завдання. Прочитати вміст файлу 1.txt. Створити текстовий файл 2.txt, записати до нього заголовок "Розклад уроків на вівторок" та розклад уроків із файлу 1.txt

Приклад. Прочитати 6 символів даного тексту у файлі. Застосувати метод read, який зчитує інформацію з файлу.  Якщо в його аргументі нічого не вказати, то він виведе всю інформацію.  

text = "3.txt"
f = open(text,'r')
print (f.read(6))
f.close()

Із рядка "програмування" виведе "програ"

Виведення із текстового файлу певного рядка даних

f1 = "test.txt"
line_number = 3   # Визначаємо номер потрібного рядка
print ("Рядок %i у файлі %s : " % (line_number, f1))

with open(f1, 'r') as filehandle:
    current_line = 1  
    for line in filehandle:
        if current_line == line_number:
            print(line)
            break
        current_line += 1

Завдання. Скориставшись файлом 1.txt, виведіть на екран 3-й урок з розкладу уроків.

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

f1 = "test.txt"
with open(f1, 'r') as filehandle:  
    filecontent = filehandle.readlines()
    for line in filecontent:
        print (line)

      

Приклад. Читання даних з текстового файлу з перетворенням їх у тип int чи float.

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

f = "test.txt"
data = []
with open("test.txt") as f:
    for line in f:
        data.append(print([float(x) for x in line.split()]))

Одновимірні масиви

Опорні вправи

Вправа 1. Створіть масив, елементами якою є цілі числа: 21, 40, 53, 17, 33, що вводяться а клавіатури. Виведіть масив на екран в один рядок.

n=5
masiv=[]
for i in range(n):
    b=int(input("Уведіть черговий елемент масиву"))
    masiv.append(b)
for i in range(n):
    print(masiv[i], end=" ")

Вправа 2. Створіть масив, елементами якою є 10 випадкових чисел у діапазоні від 4 до 10. Виведіть масив на екран.

n=10
a = range (4, 11, 1)
masiv=[]
for j in range(n):
    for i in a:
        masiv.append(i) 
print("Масив із даного діапазону чисел ")
for i in range(n):
    print(masiv[i], end=" ")

Вправа 3. Створіть масив, елементами якого є 5 перших членів арифметичної прогресії. Перший член 3, її різниця 4. Виведіть масив на екран.

n=5
a1=3
d=4
masiv=[a1]
b=a1+d
for i in range(n):
    masiv.append(b)
    b=b+d
print("Масив - арифметична прогресія ")
for i in range(n):
    print(masiv[i], end=" ")

Вправа 4. Створіть масив з семи випадкових чисел у діапазоні від 2 до 6,  обчисліть суму елементів.

n=7
a = range (2, 7, 1)
masiv=[]
for j in range(n):
    for i in a:
        masiv.append(i)
print("Масив із даного діапазону чисел ")
for i in range(n):
    print(masiv[i], end=" ")
s=0
for i in range(n):
    s=s+masiv[i]
print() 
print("Сума елементів масиві: ", s)

Вправа 5. Обчисліть середнє значення масиву, елементами якого є перші шість членів геометричної прогресії. Перший член 3, знаменник 2.

n=5
a1=3
q=2
masiv=[a1]
b=a1*q
for i in range(n):
    masiv.append(b)
    b=b*q
print("Масив - геометрична прогресія ")
for i in range(n):
    print(masiv[i], end=" ")

Практична робота
Тема "Обробіток одновимірних масивів"
1. Створити масив із 10 цілих чисел, що уведені з клавіатури. Кожен 2-1 елемент масиу обнулити. На екран вивести даний масив та змінений масив.
2. Масив із 15 цілих чисел заповнити випадковими числами із різними знаками. Знайти суму елементів масиву, що не перевищують 1. Вивести на екран сформований масив та знайдену суму.
3. Масив містить 15 членів послідовності, найбільший елемент якої дорівнює 15,5. Кожен наступний елемент менший на одне й теж число 2,5. Сформований масив надрукувати. Знайти кількість додатних членів такої послідовності.
4. Дано масив a1=[-1, 0, 1, -2, 0, 2 -3, 0, 3,-4, 0, 4]. Усі від'ємні елементи замінити числом 10, а усі додатні - числом 20. Підрахувати кількість замін та вивести цю кількість на екран. Даний масив і змінений масив надрукувати. 

Двовимірні масиви

  1.  Двовимірний масив, так само як і одновимірний, може містити елементи будь-якого типу, але лише одного.
  2.  Масив складається з фіксованої кількості рядків і стовпців.
  3.  У побуті масиви часто називаються таблицями, а в математиці – матрицями.
  4.  Елементи двовимірного масиву беруться у квадратні дужки, елементи кожного рядка також беруться у квадратні дужки,  які відокремлюються комою. Усередині рядка елементи також відокремлюються комою.
  5.  Подання аналога двовимірного масива в Python найкраще реалізується за допомогою списка списків (тип даних list, кожен елемент якого такoж типу list).

Опорні вправи

Вправа 1. Дано масив з 3 рядків, у кожному з яких є по 4 елементи. Вивести масив на екран у вигляді таблиці.

masiv=[[1,-1,0,5],[2,-2,7,0],[1,-5,5,2]]
#Виведення масиву
for i in range(3):
    print(' '.join(map(str,masiv[i])))

Заповнити масив 3*5 двозначними числами. Вивести масив у вигляді матриці.

m = 3
n = 5
r = 10  
mas = []
for i in range(m):
    mas.append([])
    for j in range(n):
        mas[i].append(r)
        r += 1  
for i in range(m):
    print(' '.join(map(str,mas[i])))

Заповнення масиву 5*6 нулями.

m = 5
n = 6
matrix = [[0 for x in range(m)] for y in range(n)]
for i in range(m):
    print(' '.join(map(str,matrix[i])))

Вправа 2. У даному масиві (вправа 1) вивести 1 рядок,  2 стовпчик. Вивести перший елемент першого рядка.

masiv=[[1,-1,0,5],[2,-2,7,0],[1,-5,5,2]]
print("Дано масив")
for i in range(3):
    print(' '.join(map(str,masiv[i])))
print("Елементи першого рядка: ")
for i in range(1):
    print(' '.join(map(str,masiv[i])))
print("Елементи другого стовпця: ")
for i in range(3):
    print(masiv[i][0])  

Вправа 3. У даному масиві знайти суму елементів, що не перевищують 4.

masiv=[[1,0,5],[2,7,4],[7,0,2]]
print("Дано масив")
for i in range(3):
    print(' '.join(map(str,masiv[i])))
print("Сума елементів масиву, що не перевищують 4")
s=0
for j in range(3):
    for i in range(3):
        if masiv[i][j]<=4:
            s=s+masiv[i][j]
print("s= ",s)

Вправа 4. У даному масиві знайти кількість елементів, що дорівнюють 1.

masiv=[[1,0,5],[2,7,1],[7,1,2]]
print("Дано масив")
for i in range(3):
    print(' '.join(map(str,masiv[i])))
print("Кількість елементів масиву, що дорівнюють 1")
k=0
for j in range(3):
    for i in range(3):
        if masiv[i][j]==1:
            k=k+1
print("k=",k)

 

Актуалізація опорних знань

1. Записати способи опису масиву

2. Написати програмний код для генерації масиву випадковими числами з діапазону (-5, 20) з кроком 5

3. У масиві записано прізвище, ім'я та по батькові нареченої та нареченого. Прізвище вони обирають спільне. Як вивести прізвище, ім'я та по батькові дівчини після регістрації шлюбу?

masiv=[["Петренко","Катерина","Степанівна"],[''Чумаченко'',"Іван", "Петрович"]].

 

Практикум обробітку двовимірного масиву

Вправа 5. Обчислення суми елементів у кожному стовпці

masiv=[[1,0,5],[2,7,4],[7,0,2]]
for i in range(3):
    print(' '.join(map(str,masiv[i])))
for j in range(3):
    s=0
    for i in range(3):
        s=s+masiv[i][j]
    print("Сума стовпця ",j,': s=',s)

Вправа 6.  Знайти максимальний елемент у кожному рядку

masiv=[[1,0,5],[2,7,4],[7,0,2]]
for i in range(3):
    print(' '.join(map(str,masiv[i])))
for i in range(3):
    maxsimum=-10000
    for j in range(3):
                if masiv[i][j]>maxsimum:
                    maxsimum=masiv[i][j]
    print("Максимальний елемент стовпця ",i,': max=',maxsimum)

Вправа 7. У двовимірному масиві [77, 32, 23 ,3], [44, 21, 23, 9], [80, 5, 2, 4]] визначте рядок із мінімальною сумою його чисел.

a=[[77, 32, 39 ,3], [44, 29, 19, 9], [11, 15, 10, 4]]
for i in range(3):
    print(' '.join(map(str,a[i])))
minimum=10000
for i in range(3):
    s=0
    for j in range(3):
        s=s+a[i][j]
    if s<minimum:
        minimum=s
        k=i
print("Мінімальна сума чисел у рядку ",k,': min_S=',minimum)

Вправа 8. Дано масив. Вивести його на екран. Обнулити 2 рядок, вивести змінений масив на екран, а потім перший стовпчик замінити числом 49 і теж вивести змінений масив на екран.

m=3
n=4
a=[[77, 32, 39 ,3], [44, 29, 19, 9], [11, 15, 10, 4]]
for i in range(m):
    print(' '.join(map(str,a[i])))
print("Обнулено 2-й рядок")
for j in range(n):
    a[1][j]=0
for i in range(m):
    print(' '.join(map(str,a[i])))    
print("Елементи 1 стовпця замінено числом 49")
for i in range(m):
    a[i][0]=49
for i in range(m):
    print(' '.join(map(str,a[i])))    

Вправа 9. Заповниеи масив 5*6 числом 5. Всі елементи парних стовпців масиву  замінити 0. 

m = 5
n = 6
matrix = [[5 for x in range(m)] for y in range(n)]
for i in range(m):
    print(' '.join(map(str,matrix[i])))
for i in range (m):
    for j in range(n):
        if j%2==0:
            matrix [i][j]=0 
print("Змінений масив")
for i in range(m):
    print(' '.join(map(str,matrix[i])))

На основі вправ 5-9 відпрацювати навички роботи з масивами. 

  • Масив 6*6 заповнено числом 5. 2 та 4 рядки замінити числом 7, 3 та 5 стовпчики замінити числом 9. Даний масив та змінені масиви вивести на екран
  • Масив 5*10 заповнено 1. Опублікувати даний масив та нові масиви, які отримуємо після замін кожного другого елемента масиву числом 10. 

Перейти до теми 3

Практикум обробітку масиву