Змінні та присвоєння

Last updated on 2025-01-24 | Edit this page

Overview

Questions

  • Як я можу зберігати дані в програмах?

Objectives

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

Використовуйте змінні для зберігання значень.


  • Змінні - це імена значень.

  • Імена змінних

    • можуть складатися тільки з букв, цифр та підкреслення _ (яке звичайно використовується, щоб відокремити слова у довгих назвах змінних)
    • не можуть починатися з цифри
    • залежать від регістру (тобто age, Age та AGE - це три різні змінні)
  • Ім’я змінної має бути змістовним, щоб ви або інший програміст знали, що це таке

  • Імена змінних, які починаються з підкреслення, наприклад __alistairs_real_age, мають специфічне значення, тому ми не будемо цього робити, доки не зрозуміємо прийняті в мові Python домовленості.

  • У Python символ = використовується для присвоєння значення, яке знаходиться праворуч, до його імені, яке вказано ліворуч.

  • Змінна створена, коли їй присвоюється значення.

  • У виразі нижче Python призначає вік змінній age та ім’я в лапках - змінній first_name.

    PYTHON

    age = 42
    first_name = 'Ahmed'

Використовуйте print для виведення значень.


  • Python має вбудовану функцію print, яка друкує щось як текст.
  • Щоб викликати функцію (тобто, щоб виконати її), треба вказати її ім’я.
  • Щоб передати функції значення (тобто дані для друку), їх треба помістити у дужки.
  • Щоб направити до друку рядок тексту, його треба помістити в одинарні або подвійні лапки.
  • Значення, які передаються до функції, називаються аргументами

PYTHON

print(first_name, 'is', age, 'years old')

OUTPUT

Ahmed is 42 years old
  • print автоматично додає пробіл між надрукованими аргументами, щоб відокремити їх.
  • Також print переходить на новий рядок після друку.

Змінні мають бути створені перед їх використанням.


  • Якщо змінна ще не існує, або якщо ім’я було неправильно написано, Python повідомляє про помилку. (На відміну від деяких інших мов, які можуть “вгадати” якесь значення за замовчуванням.)

PYTHON

print(last_name)

ERROR

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-c1fbb4e96102> in <module>()
----> 1 print(last_name)

NameError: name 'last_name' is not defined
  • Останній рядок у повідомленні про помилку є найбільш інформативним.
  • Ми більш детально розглянемо повідомлення про помилки пізніше.

Змінні зберігаються між комірками

Майте на увазі, що в блокноті Jupyter важливий порядок виконання комірок, а не порядок їх розташування. Python запам’ятає весь код, який було виконано раніше, у тому числі всі змінні, які ви визначили, незалежно від порядку в блокноті. Тому, якщо ви визначите змінні нижче в блокноті, а потім (повторно) запустите комірки вище, то ті комірки, що визначені нижче, все одно будуть присутні. Як приклад, створіть дві комірки наступного вмісту у такому порядку:

PYTHON

print(myval)

PYTHON

myval = 1

Якщо виконати це послідовно, то перша комірка дасть помилку. Однак, якщо ви запустите першу комірку після другої, вона виведе на екран 1. Щоб уникнути плутанини, можна скористатися опцією Kernel -> Restart & Run All, яка перезавантажує інтерпретатор і запускає все з чистого аркуша, зверху вниз.

Змінні можна використовувати для обчислень.


  • Ми можемо використовувати змінні в обчисленнях так само, як би вони були значеннями.
    • Пам’ятайте, ми присвоїли значення 42 змінній age кількома рядками вище.

PYTHON

age = age + 3 
print('Age in three years:', age)

OUTPUT

Age in three years: 45

Використовуйте індекс, щоб отримати один символ із рядка.


  • Символи (окремі літери, цифри тощо) у рядку є впорядкованими. Наприклад, рядок 'AB' не те саме, що 'BA'. Завдяки такому упорядкуванню ми можемо розглядати рядок як список символів.
  • Кожна позиція в рядку (перша, друга тощо) має номер. Це число називається індексом або іноді нижнім індексом.
  • Індекси нумеруються від 0.
  • Використовуйте індекс позиції у квадратних дужках, щоб отримати символ з тієї позиції у рядку.
Рядок кода Python, print(atom\_name0), демонструє, що використання нульового індексу виведе лише початкову літеру, у цьому випадку ‘h’ для ‘helium’.
Рядок кода Python, print(atom\_name\[0\]), демонструє, що використання нульового індексу виведе лише початкову літеру, у цьому випадку ‘h’ для ‘helium’.

PYTHON

atom_name = 'helium'
print(atom_name[0])

OUTPUT

h

Використовуйте зріз, щоб отримати підрядок.


  • Частина рядка називається підрядок. Він може складатися навіть тільки з одного символу.
  • Список складається з елементів. У випадку, коли рядок розглядається як список, його елементами є окремі символи.
  • Зріз - це частина рядка (в загальному випадку, частина будь-якого обʼєкту, схожого на колекцію).
  • Ми беремо зріз із позначенням [start:stop], де start — ціле число, що є індексом першого потрібного нам елементу, а stop - ціле число, що є індексом елементу відразу після останнього потрібного нам елементу.
  • Проміжок між stop and start - це довжина зрізу.
  • Визначення зрізу не змінює вміст вихідного рядка. Натомість, визначений зріз повертає копію початкового рядка.

PYTHON

atom_name = 'sodium' 
print(atom_name[0:3])

OUTPUT

sod

Використовуйте вбудовану функцію len, щоб знайти довжину рядка.


PYTHON

print(len('helium'))

OUTPUT

6
  • Вкладені функції обчислюються зсередини назовні, як у математиці: вирази, що знаходяться всередині дужок, обчислюються першими.

Python чутливий до регістру.


  • Python вважає, що букви верхнього та нижнього регістру відрізняються, отже Name і name - різні змінні.
  • Існують домовленості про використання великих літер на початку імен змінних, тому ми будемо використовувати малі літери.

Використовуйте змістовні назви змінних.


  • Ви можете використовувати будь-які комбінації символів для імен змінних, поки вони задовольняють вищевказані правила (букви, цифри та знак підкреслення).

PYTHON

flabadab = 42
ewr_422_yY = 'Ahmed'
print(ewr_422_yY, 'is', flabadab, 'years old')
  • Використовуйте змістовні назви змінних, щоб допомогти іншим зрозуміти, що робить програма.
  • Найважливіша “інша людина” — це ви в майбутньому.

Заміна значень

Fill the table showing the values of the variables in this program after each statement is executed.

PYTHON

# Оператор  # Значення x   # Значення y   # Значення swap #
x = 1.0     #              #              #               #
y = 3.0     #              #              #               #
swap = x    #              #              #               #
x = y       #              #              #               #
y = swap    #              #              #               # 

OUTPUT

# Оператор # Значення x   # Значення y   # Значення swap #
x = 1.0    # 1.0          # не визначено # не визначено  #
y = 3.0    # 1.0          # 3.0          # не визначено  #
swap = x   # 1.0          # 3.0          # 1.0           #
x = y      # 3.0          # 3.0          # 1.0           #
y = swap   # 3.0          # 1.0          # 1.0           #

Ці три рядки обмінюються значеннями в x і y використовуючи змінну swap для тимчасового зберігання. Це досить поширена ідіома програмування.

Прогнозування значень

Яким є остаточне значення змінної position у програмі нижче? (Try to predict the value without running the program, then check your prediction.)

PYTHON

initial = 'left'
position = initial
initial = 'right'

PYTHON

print(position)

OUTPUT

left

The initial variable is assigned the value 'left'. У другому рядку змінна position також отримує значення 'left'. У третьому рядку змінній initial надається значення 'right', але змінна position зберігає своє значення 'left'.

Challenge

Якщо ви присвоїли a = 123, що станеться, якщо ви спробуєте отримати другу цифру a через a[1]?

Numbers are not strings or sequences and Python will raise an error if you try to perform an index operation on a number. У наступному уроці про типи даних і перетворення типів ми дізнаємось більше про типи і як конвертувати один тип в інший. Якщо вам потрібна N-та цифра числа, ви можете перетворити число на рядок за допомогою вбудованої функції str, а потім виконати операцію індексування цього рядка.

PYTHON

a = 123
print(a[1])

ERROR

TypeError: 'int' object is not subscriptable

PYTHON

a = str(123)
print(a[1])

OUTPUT

2

Вибір імені

Яке ім’я для змінної є кращим: m, min або minutes? Чому? Hint: think about which code you would rather inherit from someone who is leaving the lab:

  1. ts = m 60 + s
  2. tot_sec = min 60 + sec
  3. total_seconds = minutes * 60 + seconds

minutes is better because min might mean something like “minimum” (and actually is an existing built-in function in Python that we will cover later).

Практика застосування зрізів

Що друкує наступна програма?

PYTHON

atom_name = 'carbon'
print('atom_name[1:3] is:', atom_name[1:3])

OUTPUT

atom_name[1:3] is: ar

Різноманітні види зрізів

Є наступний рядок:

PYTHON

species_name = "Acacia buxifolia"

What would these expressions return?

  1. species_name[2:8]
  2. species_name[11:] (без значення після двокрапки)
  3. species_name[:4] (без значення до двокрапки)
  4. species_name[:] (тільки двокрапка)
  5. species_name[11:-3]
  6. species_name[-5:-3]
  7. What happens when you choose a stop value which is out of range? (тобто спробуйте виконати species_name[0:20] або species_name[:103])
  1. species_name[2:8] повертає підрядок 'acia b'

  2. species_name[11:] повертає підрядок 'folia', з позиції 11 до кінця рядку

  3. species_name[:4] повертає підрядок Acac', з початку рядку до позиції 4, не включаючи цю позицію

  4. species_name[:] повертає весь рядок ‘Acacia buxifolia’`

  5. species_name[11:-3] повертає підрядок 'fo', з 11 позиції до третьої позиції з кінця рядку, не включаючи її

  6. species_name[-5:-3] також повертає підрядок 'fo', з п’ятої позиції з кінця до третьої позиції з кінця, не включаючи її

  7. Якщо частина фрагмента виходить за межі діапазону, операція не повертає помилку. species_name[0:20] дає той самий результат, що і species_name[0:], та species_name[:103] дає такий самий результат, як species_name[:]

Key Points

  • Використовуйте змінні для зберігання значень.
  • Використовуйте print для виводу значень.
  • Variables persist between cells.
  • Змінні мають бути створені перед їх використанням.
  • Змінні можна використовувати для обчислень.
  • Використовуйте індекс, щоб отримати один символ із рядка.
  • Використовуйте зріз, щоб отримати підрядок.
  • Використовуйте вбудовану функцію len, щоб знайти довжину рядка.
  • У Python важливо, який регістр використовується.
  • Використовуйте змістовні назви змінних.