Змінні та присвоєння
Огляд
Викладання: 10 хв
Вправи: 10 хвПитання
Як я можу зберігати дані в програмах?
Цілі
Написати програми, які присвоюють скалярні значення змінним і виконують обчислення з цими значеннями.
Правильнo відстежувати зміни значень у програмах, які використовують скалярне присвоєння.
Використовуйте змінні для зберігання значень.
- Змінні - це назви значень.
- У Python символ
=використовується для присвоєння значення, яке знаходиться праворуч, до її назви, яка вказана ліворуч. - Змінна створeна, коли ій присвоюється значення.
- Нижче Python присвоює значення року змінній
ageта ім’я у лапках - зміннійfirst_name.
age = 42
first_name = 'Ahmed'
- Назви змінних
- можуть складатися тільки з букв, цифр та підкреслення
_(яке звичайно використовується, щоб відокремити слова у довгих назвах змінних) - не можуть починатися з цифри
- залежать від регістру (тобто
age,AgeтаAGE- це три різні змінні)
- можуть складатися тільки з букв, цифр та підкреслення
- Назви змінних які починаються з підкреслення, як наприклад
__alistairs_real_age, мають спеціальне значення, і тому ми не будемо використовувати їх, доки не зрозуміємо цього правила.
Використовуйте print для виводу значень.
- Python має вбудовану функцію
print, яка друкує щось як текст. - Щоб викликати функцію (тобто, щоб виконати її), треба вказати її ім’я.
- Щоб передати функції значення (тобто, те що треба надрукувати), їх треба помістити у дужки.
- Щоб направити до друку рядок тексту, його треба помістити у одинарні або подвійні лапки.
- Значення, які передаються до функції, називаються аргументами
print(first_name, 'is', age, 'years old')
Ahmed is 42 years old
printавтоматично додає пропуск проміж надрукованими аргументами, щоб розділити їх.- Також
printпереходить на новий рядок після друку.
Змінні мають бути створені перед їх використанням.
- Якщо змінна не їснує, або її назва написана з помилкою, Python видасть помилку. (На відміну від деяких іншіх мов, які можуть “вгадати” якесь значення за замовчуванням.)
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, яка очищує інтерпретатор і запускає все з чистого листа зверху вниз.
Змінні можна використовувати для обчислень.
- Ми можемо використовувати змінні в обчисленнях так само, як би вони були значеннями.
- Пам’ятайте, ми присвоїли значення
42зміннійageкількома рядками вище.
- Пам’ятайте, ми присвоїли значення
age = age + 3
print('Age in three years:', age)
Age in three years: 45
Використовуйте індекс, щоб отримати один символ із рядка.
- Символи (окремі літери, цифри тощо) у рядку є
упорядкованими. Наприклад, рядок
'AB'не те саме, що'BA'. Завдяки такому упорядкуванню ми можемо розглядати рядок як список символів. - Кожна позиція в рядку (перша, друга тощо) має номер. Це число називається індексом або іноді нижнім індексом.
- Індекси нумеруються від 0.
- Використовуйте індекс позиції в квадратних дужках, щоб отримати символ з тієї позиції.
atom_name = 'helium'
print(atom_name[0])
h
Використовуйте зріз, щоб отримати підрядок.
- Частина рядка має назву підрядок. Підрядок може бути дуже коротким - лише один символ.
- Список складається з елементів. У випадку, коли рядок розглядається як список, його елементами є окремі символи.
- Фрагмент - це частина рядка (в загальному випадку, будь-який вираз).
- Фрагмент вилучається за допомогою
[start:stop], деstartзамінюється на індекс елемента, який повинен бути першим, аstop- на індекс елемента, який розташований відразу після останнього потрібного елемента. - З математичної точки зору, фрагмент вибирає
[start:stop). - Проміжок між
stopandstart- це довжина фрагмента. - Вилучення фрагмента не змінює вміст вихідного рядка. Навпаки, фрагмент буде копією частини вихідного рядка.
atom_name = 'sodium'
print(atom_name[0:3])
sod
Використовуйте вбудовану функцію len, щоб знайти довжину рядка.
print(len('helium'))
6
- Вкладені функції опрацьовуються, починаючи з середини, як в математиці.
Python чутливий до регістру.
- Python вважає, що великі та малі літери різні,
таким чинoм,
Nameтаnameє різними змінними. - Існують домовленості про використання великих літер на початку імен змінних, тому ми будемо використовувати малі літери.
Використовуйте осмислені назви змінних.
- 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 subscriptablea = str(123) print(a[1])2
Вибір імені
Яка назва змінної є кращою:
m,minабоminutes? Чому? Підказка: подумайте, який код ви б хотіли успадкувати від когось, хто виходить з лабораторії:
ts = m * 60 + stot_sec = min * 60 + sectotal_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
Визначення зрізів
- Що є результатом зрізу
thing[low:high]?- Що є результатом зрізу
thing[low:](без значення після двокрапки)?- Що є результатом зрізу
thing[:high](без значення до двокрапки) ?- Що є результатом зрізу
thing[:](тільки двокрапка)?- Що є результатом зрізу
thing[number:some-negative-number]?- Що станеться, якщо ми оберемо значення
high, яке виходить за рамки діапазону? (наприклад, спробуйтеatom_name[0:15])Рішення
thing[low:high]поверне зріз, починаючи зі значенняlowдо значення передhighthing[low:]поверне зріз, починаючи зі значенняlow, що містить всі значення до кінцяthingthing[:high]поверне зріз, починаючи зі значенняthingдо значення передhighthing[:]поверне всі значення рядкаthingthing[number:some-negative-number]поверне зріз, починаючи зі значенняnumberдо значенняsome-negative-number, що розраховується з кінця рядкаthing- Якщо частина фрагмента виходить за межі діапазону, операція не завершується.
atom_name[0:15]дає той самий результат, що йatom_name[0:].
Ключові моменти
Використовуйте змінні для зберігання значень.
Використовуйте
Змінні зберігаються між клітинками.
Змінні мають бути створені перед їх використанням.
Змінні можна використовувати в обчисленнях.
Використовуйте індекс, щоб отримати один символ із рядка (string).
Використовуйте зріз, щоб отримати підрядок (substring).
Використовуйте вбудовану функцію
len, щоб знайти довжину рядка.Python чутливий до регістру.
Використовуйте змістовні імена змінних.