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

Огляд

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

Цілі
  • Написати програми, які присвоюють скалярні значення змінним і виконують обчислення з цими значеннями.

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

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

age = 42
first_name = 'Ahmed'

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

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

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

print(last_name)
---------------------------------------------------------------------------
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 запам’ятає весь код, який було запущено раніше, включно з будь-якими змінними, які ви визначили, незалежно від порядку в блокноті. Тому, якщо ви визначите змінні нижче в блокноті, а потім (повторно) запустите комірки вище, то ті клітинки, що визначені нижче, все одно будуть присутні. Для прикладу створіть дві клітинки з таким вмістом у такому порядку:

print(myval)
myval = 1

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

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

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

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

Ілюстрація індексації

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

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

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

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

print(len('helium'))
6

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

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

flabadab = 42
ewr_422_yY = 'Ahmed'
print(ewr_422_yY, 'is', flabadab, 'years old')

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

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

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

Рішення

# Оператор # Значення 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 у наведеній нижче програмі? (Спробуйте передбачити значення без запуску програми, а потім перевірте свій прогноз).

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

Рішення

'left'

Змінній initial присвоюється значення 'left'. У другому рядку змінна position також отримує значення рядка 'left'. У третьому рядку змінній initial надається значення 'right', але змінна position зберігає своє рядкове значення 'left'.

Випробування

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

Рішення

Числа не є рядками чи послідовностями, і Python поверне помилку, якщо ви спробуєте виконати операцію індексування на числі. У наступному уроці про типи та перетворення типів ми дізнаємося більше про типи та про правила конвертації різних типів. Якщо вам потрібна N-та цифра числа, ви можете перетворити число на рядок за допомогою вбудованої функції str, а потім виконати операцію індексування цього рядка.

a = 123
print(a[1])
TypeError: 'int' object is not subscriptable
a = str(123)
print(a[1])
2

Вибір імені

Яка назва змінної є кращою: m, min або minutes? Чому? Підказка: подумайте, який код ви б хотіли успадкувати від когось, хто виходить з лабораторії:

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

Рішення

minutes краще, тому що min може означати щось на зразок “мінімум” (і фактично це вбудована функція в Python, яку ми розглянемо пізніше).

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

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

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

Рішення

atom_name[1:3] is: ar

Визначення зрізів

  1. Що є результатом зрізу thing[low:high]?
  2. Що є результатом зрізу thing[low:] (без значення після двокрапки)?
  3. Що є результатом зрізу thing[:high] (без значення до двокрапки) ?
  4. Що є результатом зрізу thing[:] (тільки двокрапка)?
  5. Що є результатом зрізу thing[number:some-negative-number]?
  6. Що станеться, якщо ми оберемо значення high, яке виходить за рамки діапазону? (наприклад, спробуйте atom_name[0:15])

Рішення

  1. thing[low:high] поверне зріз, починаючи зі значення low до значення перед high
  2. thing[low:] поверне зріз, починаючи зі значення low, що містить всі значення до кінця thing
  3. thing[:high] поверне зріз, починаючи зі значення thing до значення перед high
  4. thing[:] поверне всі значення рядка thing
  5. thing[number:some-negative-number] поверне зріз, починаючи зі значення number до значення some-negative-number, що розраховується з кінця рядка thing
  6. Якщо частина фрагмента виходить за межі діапазону, операція не завершується. atom_name[0:15] дає той самий результат, що йatom_name[0:].

Ключові моменти

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

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

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

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

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

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

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

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

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

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