Телефонуйте » (+38) 096 227 41 41

Навчимося працювати з рядковими даними, що допоможе нам в наступному занятті виконати завдання з перетворення тексту в мову.

Кортежі

Кортежі э один із типів послідовностей. Але на відміну від розглянутих раніше рядків, які складаються лише з символів, кортежі здатні мати елементи будь-якої природи. При цьому не обов’язково всі елементи кортежу повинні відноситися до одного і того ж типу.

# Арсенал хакера
# Демонструє створення кортежу
# створимо пустий кортеж
inventory = ()
# розглянемо його як умову
if not inventory:
print ("Ви не хакер.")
input("\nHaтисни Enter, щоб продовжити.")
# тепер створимо кортеж з кількома елементами
inventory = ("маршрутизатор Wi-Fi",
        "антена",
        "образ Kali Linux",
        "проксі-сервер")
# виведемо цей кортеж на монітор
print("\nСклад кортежу: ")
print(inventory)
# виведемо всі елементи послідовно
print("\nОтже, у вашому арсеналі:")
for item in inventory:
print (item)
input( "\n\nHaтисни Enter, щоб вийти.")

Кортеж, розділений на кілька рядків, зробить ваш код більш легким для читання. Розміщувати рівно один елемент в рядку коду, між іншим, не обов’язково: можна розмістити і декілька. Досить пам’ятати, що кожний з некінцевих рядків повинен завершуватися роздільником - комою, а на наступному рядку треба писати дужку, що закривається. Це оберігає від простого елемента в дужках і ви не будете забувати дописувати кому при додаванні елементів в кінці. Відповідно, якщо в одноелементному кортежі не поставити кому після останнього і єдиного елемента, то це навіть не буде кортеж - це буде якийсь елемент сам по собі в дужках.
Кортежі можна зчіплювати, індексувати, створювати на них зрізи.

Використання кортежів

# Арсенал хакера 2
# Демонструє роботу з кортежами
# створимо кортеж з кількома елементами
inventory = ("маршрутизатор Wi-Fi",
        "антена",
        "образ Kali Linux",
        "проксі-сервер")
print("\nОтже, у вашому арсеналі: ")
for item in inventory:
print (item)
input("\n\nHaтисни Enter, щоб продовжити")

Застосування функції len() до кортежі:

# знайдемо довжину кортежу
print("Зараз у вашому розпорядженні", len(inventory), "інструмента/-ів.")
input("\nHaтисни Enter, щоб продовжити.")

Застосування оператора in до кортежів:

# перевірка на приналежність кортежу за допомого in
if "образ Kali Linux" in inventory:
print ("Ви ще той ‘фрукт’ ")
input("\nHaтисни Enter, щоб продовжити.")

Індексування кортежів:

# вивід одного елемента з певним індексом
index = int(input("\nBвeдіть індекс одного з інструментів хакера: "))
print("Під індексом", index, "в арсеналі знаходиться", inventory[index])
input("\nHaтисни Enter, щоб продовжити.")

Зрізи кортежів

# відобразимо зріз
start = int(input("\nBвeдіть початковий індекс зрізу: "))
finish = int(input("Bвeдіть кінцевий індекс зрізу: "))
print("Зpіз inventory[", start, ":", finish, "] - це", end=" ")
print(inventory[start:finish])
input("\nHaтисни Enter, щоб продовжити.")

Незмінність кортежів

Інтерактивна сесія:

>>> inventory =("маршрутизатор Wi-Fi", "антена", "образ Kali Linux", "проксі-сервер")
>>> print(inventory)
>>> inventory[0] = "мережева картка"

Зчеплення кортежів::

# об’єднаємо два кортежі
chest = ("мережева картка", "комутатор")
print("Bи дещо придбали. От що додалось: ")
print(chest)
print("Ви додали придбане до своїх інструментів.")
inventory += chest
print("Teпep маєте: ")
print(inventory)
input("\n\nHaтисни Enter, щоб вийти.")

Приклад вибору випадкового елемента з кортежу

Створимо кортеж, який буде мати список слів. Зверніть увагу, що назва змінної TOOLS набрана прописними буквами: далі в програмі вона розглядається як константа.

# створимо послідовність слів, з яких буде вибирати комп’ютер
TOOLS =("маршрутизатор Wi-Fi", "антена", "образ Kali Linux", "проксі-сервер", "мережева\ картка", "комутатор")

Для того, щоб вибрати з TOOLS випадкове слово, застосуємо функцію random.choice():

# випадковим чином виберемо з послідовності одне слово

word = random.choice(TOOLS)

Це нова для нас функція, але дуже проста. Інтерпретатор бере будь-яку послідовність і витягує з неї випадковий елемент. Після того, як слово вибране, воно розміщується в змінній word.
А далі залишається лише вивести це слово на монітор.

Списки

Списки, як і кортежі, - послідовності. Але списки можуть змінюватися. Їх елементи піддаються модифікації. Приклад списку:

# Арсенал хакера 3
# Демонструє створення списку
# Створимо список з кількома елементами і виведемо його за допомогою циклу for
inventory = ["маршрутизатор Wi-Fi", "антена", "образ Kali Linux", "проксі-сервер"]
print ("\nОтже, у вашому арсеналі:")
for item in inventory:
print (item)
input ("\n\nHaтисни Enter, щоб продовжити.")

Застосування функції len() до списків

# знайдемо довжину списку
print ("Зараз у вашому розпорядженні", len(inventory), "інструмента/-ів.")
input("\nHaтисни Enter, щоб продовжити.")

Застосування оператора in до списків

# перевірка на приналежність списку за допомого in
if "образ Kali Linux" in inventory:
print ("Ви ще той ‘фрукт’ ")
input("\nHaтисни Enter, щоб продовжити.")

Індексування списків

# вивід одного елемента з певним індексом
index = int(input("\nBвeдіть індекс одного з інструментів хакера: "))
print( "Під індексом", index, "в арсеналі знаходиться", inventory[index])
input("\nHaтисни Enter, щоб продовжити.")

Зрізи списків

# відобразимо зріз
start = int(input("\nBвeдіть початковий індекс зрізу: "))
finish = int(input("Bвeдіть кінцевий індекс зрізу: "))
print ("Зpіз inventory[", start, ":", finish, "] - це", end=" ")
print (inventory[start:finish])
input ("\nHaтисни Enter, щоб продовжити.")

Зчеплення списків

# об’єднаємо два списки
chest = ["мережева картка", "комутатор"]
print ("Bи дещо прикупили. От що додалось: ")
print (chest)
print ("Ви додали куплене до своїх інструментів.")
inventory += chest
print ("Teпep маєте: ")
print (inventory)
input ("\n\nHaтисни Enter, щоб вийти.")

Змінність списків

Якщо не враховувати заміни круглих дужок квадратними, списки нічим новим в порівнянні з кортежами себе не проявили. Але різниця все таки є, і вона величезна.
Присвоєння нового значення елементу, вибраному через індекс

# присвоєння значення елементу за індексом
print ("Bи замінили маршрутизатор Wi-Fi на вінчестер.")
inventory[0] = "вінчестер"
print("Teпep до вашого арсеналу належать наступні предмети: ")
print (inventory)
input("\nHaтисни Enter. щоб продовжити.")

Примітка: створити таким чином новий елемент з новим індексом не можна.

Присвоєння нових значень зрізу списку

# приписуємо значення елементам за зрізом індексів
print ("Зa зароблені гроші ви купили індикатор поля, який дозволяє виявляти радіовипромінюючі пристрої.")
inventory[4:6] = ["індикатор поля"]
print ("Teпep у вашому розпорядженні:")
print (inventory)
input("\nHaтисни Enter, щоб продовжити.")

Двом елементам списку - inventory[4] і inventory[5] - присвоєне єдине рядкове значення "індикатор поля". Оскільки одноелементний список став значенням двохелементного зрізу, то довжина послідовності inventory зменшилась на одиницю.

Видалення елемента списку

Елемент списку можна видалити командою del, після якої цей вибраний елемент і вказується:

# видаляємо елемент
print ("Bід вітру ваша антена зламалась")
del inventory[1]
print ("От що тепер залишилось в арсеналі:")
print (inventory)
input ("\nHaтисни Enter, щоб продовжити.")

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

# видаляємо зріз
print ("Віддали в ремонт вінчестер і зламали DVD-диск з образом Kali Linux.")
del inventory[:2]
print ("B арсеналі тепер лише:")
print (inventory)
inрut("\п\пНатисни Enter, щоб вийти.")

Зріз inventory[:2], який виглядає як ["вінчестер", "образ Kali Linux"], видаляється зі списку inventory наступною командою: del inventory[:2]. Як і при видаленні елемента, довжина списку зменшується. Елементи, які залишились, утворюють безперервно індексований список, номера позицій в якому, як і раніше, починаються з 0.

Застосування спискових методів

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

Програма «Результати тестування»

В програмі «Результати тестування» на базі спискових методів створюється і діє підбір видуманих кращих результатів тестування студентів з якого-небудь предмета.

# Результати тестування
# Демонструє списочні методи
scores = []
choice = None
Відображення меню
Основа програми - цикл while. Його робота буде продовжуватися доти, поки користувач не введе 0.
while choice != "0":
print(
“””
Результати тестування
0 - Вийти
1 - Показати максимальні бали
2 – Додати максимальні бали
3 - Видалити бали
4 - Сортувати список
“””
)
choice = input("Baш вибір: ")
print ()

Вихід з програми

# вихід
if choice == “0”:
print (“До побачення.”)

Відображення списку максимальних балів

# виведення кращих балів на екран
elif choiсе == “1”:
print("Бали")
for score in scores:
print(score)

Додавання максимальних балів

# додавання кращого балу
elif choice == "2":
score = int(input("Запишіть свій максимальний бал: "))
scores.append(score)

Видалення максимального балу

# видалення максимального балу
elif choice == "3":
score = int(input("Який із балів видалити?: "))
if score in scores:
scores.remove(score)
else:
рrint("Вказаний бал". score. "відсутній в списку.")

Зверніть увагу, чим відрізняється remove() від del. Метод remove() видаляє елемент, заданий не номером позиції, а значенням. Якщо значення, яке шукаєте, є в списку кілька разів, то буде видалене лише перше його входження.
Будьте акуратні при використанні метода remove(). Якщо спробувати видалити зі списку значення, якого в ньому немає, то інтерпретатор видає помилку. Безпечна форма запису - саме така, як в прикладі коду.
Сортування списку балів

# сортування максимальних балів
elif choice == "4":
scores.sort(reverse=True)

Метод sort() впорядковує елементи списку. По замовчуванню сортування проводиться в зростаючому порядку, від менших значень до більших. Для того, щоб більші бали відображалися вище в списку треба передати параметру reverse значення True.
Щоб впорядкувати список від меншого до більшого, наприклад, список пumЬers, треба написати так: numbers.sort()
Оброблення помилкового вибору

# незрозумілий ввід користувача
else:
рrint("Пробачте. в меню немає пункту", choice)

Після того, як користувач, бажаючи покинути програму, введе 0, цикл завершиться, але, як і завжди, програма повинна дочекатися від користувача кінцевого підтвердження:
input("\n\nHaтисни Enter, щоб вийти.")

Коли використовувати кортежі, а коли – списки

Не варто відмовлятися від кортежів. Інколи створити кортеж доцільніше, ніж список.

·    Кортежі працюють швидше.
·    Незмінність кортежів робить їх ідеальним засобом створення констант. Константи, які задані кортежами, зроблять код зрозумілішим і безпечнішим.
·    Кортежі застосовують в окремих структурах даних, від яких Python вимагає незмінних значень. Наприклад, словник повинен складатися з даних незмінного типу.

Однак, звичайно, не можна заперечувати, що гнучкість списків значно вища. Намагайтеся в основному користуватися ними, а не кортежами.

Попереднє заняття - Наступне заняття

Новини

  • SDR в IoT

    iotSDR пропонує платформу розробок для IoT-радіо та мережевих доменів. На платі два передавачі Microchip AT86RF215, для вводу-виводу модему на Xilinx ZYNQ SoC, приймач GNSS MAX2769 для GPS, Galileo, BieDou та Glonass. Плата сумісна з ПЗ GNURadio SDR. Дозволяє розробити протоколи фізичного рівня LoRa, SigFox, WightLess, Bluetooth, BLE, 802.15.4, ZigBee тощо для IoT, або шлюз IoT через TheThingsNetwork, LPWAN або Google Thread. Пам'ять EEPROM: 1x AT24MAC602 , flash-пам'ять: 1x QSPI 128 Мб, RAM: 256 MБ DDR3,слот для Micro SD карти, входи/виходи: 2x 8-бітних інтерфейси PL, інтерфейс 8-бітного PS, Gigabit Ethernet, USB 2.0 (USB3310), USB 2.0 (CP2104), 2x SMA RF-роз'єми для приймача діапазонів IoT, 2x SMA RF-роз'єми для приймача 2,4 ГГц , RF-роз'єм приймач GNSS, FPGA-роз'єм JTAG для програмування. Розміри плати: 76,2 мм x 101,6 мм.

     

    in Новини

Записатися на курс