Первые шаги в Python
Откройте IDLE и начните писать код:
print("Hello world")
НажмитеEnter
. Как видите, в результате выполнения команды появилась надпись, Hello world
, а также новое поле, в которое мы можем ввести другую команду.
Команда print()
отвечает (в данном примере) за написание текста, который мы помещаем в между скобок, сопровождающих команду, и дополнительно в кавычки. Теперь введите и выполните ( Enter
) следующую команду:
text = "Hello world"
На этот раз такого эффекта нет. Итак, выполните следующую команду:
print(text)
В результате мы увидим:
Hello world
Сравните первую команду с последней. Они разные, хотя результат один и тот же. В первом мы передавали print()
текст непосредственно команде, которая затем выводилась. Мы дали слово второму text
. Вообще-то надо было писать не «слово», а переменную . У переменной есть имя, в данном случае text
. Мы можем присвоить ему некоторое значение, которое он затем сохранит. В данном случае это был короткий текст, но есть и другие возможности, о которых речь пойдет позже. Значение переменной было присвоено с помощью оператора =
. По обе стороны от оператора есть пробелы, это не обязательно, но повышает читабельность кода.
В приведенном выше примере text
мы ранее присвоили переменной текст «Hello World!». Затем мы передали переменную команде print()
, которая вывела на экран хранящийся в ней текст.
Однако вы можете задаться вопросом, откуда команда print()
«знала», что ей не следует печатать текст «text», а использовать переменную с именем tekst
. Запустите следующую команду:
print("text")
text
На этот раз, очевидно, команда не использовала переменную text
. Сравните команды выше. Когда print()
текст, передаваемый команде, был заключен в кавычки, он печатался как введенный. Когда мы использовали переменную, она вводилась без кавычек. Попробуйте выполнить следующую команду:
print(Hello world)
File "<python-input-12-aebb45e2da23>", line 1
print(Hello world
) ^ SyntaxError: invalid syntax
На этот раз текст не был напечатан, но появилось сообщение об ошибке. SyntaxError: invalid syntax
указывает на синтаксическую ошибку, в данном случае, конечно, кавычки были опущены.
Здесь стоит отметить, что команда print()
на самом деле является вызовом функции с таким именем. О функциях мы поговорим позже, а пока стоит знать, что это некие куски кода, имеющие имя. Мы можем предоставить им данные, которые можно обрабатывать в функциях, функции также могут возвращать данные.
Цифры и простые расчеты в Python
Давайте проверим, как команда print()
отреагирует на ввод числа вместо текста или переменной.
print(7)
7
Число (введенное без кавычек) было напечатано правильно. Теперь попробуем что-нибудь еще:
print(7+3)
10
Как видите, оба числа были сложены, и результат был напечатан.
Выше мы использовали команду print()
, но если мы хотим просто получить результат, то теперь можем проверить и некоторые другие действия:
print(7-3)
print(7*3)
print(7**3)
print(7/3)
print(7//3)
print(7%3)
4
21
343
2.3333333333333335
2
1
Подведем итог изученным нами арифметическим операторам:
Оператор | значение | пример | результат |
---|---|---|---|
+ | добавление | 7+3 | 10 |
— | вычитание | 7-3 | 4 |
* | умножение | 7*3 | 21 |
** | возведение в степень | 7**3 | 343 |
/ | разделение | 7/3 | 2.33… |
// | целочисленное деление | 7//3 | 2 |
% | остаток от деления | 7%3 | 1 |
Если мы работаем в JupyterLab
интерактивном IPython
режиме или Python (см. ниже) и хотим увидеть результат, нам не обязательно использовать команду, print()
если она является единственным или последним выражением в последовательности команд. Просто введите действие напрямую, и результат будет отображен:
print(7*7)
2*2
49
4
Однако этот метод не будет работать, если мы воспользуемся им, написав сценарий, о котором мы поговорим позже.
Переменные и числа
Ранее мы использовали переменную для хранения короткого текста. Теперь будем хранить числа в переменных и использовать их в вычислениях:
x = 11
y = 123
print(x)
print(x * y)
11
1353
Результат расчета также можно сохранить в переменной:
z = x * y
print(z)
1353
Переменные, как следует из названия, являются изменяемыми, а это означает, что вы можете изменять присвоенные им значения:
x = 2
z = y**2
print(x)
print(z)
2
15129
Прежде чем двигаться дальше, стоит обратить внимание на одну очень важную особенность Python. Переменные — это просто имена, указывающие на объект , хранящийся в памяти компьютера. Поэтому присвоение им значения не означает создание копии этого значения, а лишь «добавление метки», которая является переменной. Позже я объясню более подробно, что такое объект, а пока давайте предположим, что это «нечто», способное хранить данные (например, числа) и выполнять определенные операции.
Давайте посмотрим на следующую серию команд:
x = 20
print(x)
y = x
print(y)
x = 10
print(x)
print(y)
20
20
10
20
Последовательно были выполнены следующие действия:
- Был создан объект, хранящий значение 20, а затем была создана «метка» (переменная) с именем,
x
указывающим на этот объект. - Значение, хранящееся в объекте, на который указывает переменная, было напечатано
x
. - Была создана еще одна переменная,
y
указывающая на тот же объект (со значением 20). - Значение, хранящееся в объекте, на который указывает переменная, было напечатано
y
. - Был создан еще один объект, хранящий число 10, и
x
этому объекту была присвоена переменная. - Были напечатаны значения, хранящиеся в объектах, которым были присвоены обе переменные.
Как видите, значение, возвращаемое после вызова переменной, не изменилось y
.
Далее для простоты я буду использовать сокращения, например «значение, хранящееся в переменной», но помните, что переменная указывает только на объект, хранящий это значение.
Последовательность действий
Порядок действий тот же, что и в математике: сначала возведение в степень, затем умножение и деление и, наконец, сложение и вычитание.
result = 10+10*2**3
print(result)
90
Если мы хотим изменить порядок выполнения действий, мы используем пары скобок (
)
, но мы можем их вложить, тогда действия выполняются, начиная с наиболее вложенных выражений. Иногда стоит использовать круглые скобки, даже если они не меняют порядок выполняемых действий, а группируют выражения для повышения наглядности кода:
result = ((10+10)*2) / (1+3)
print(result)
10.0
Обратите внимание, что в приведенном выше выражении я поставил пробелы вокруг знака /
деления, который является последней выполняемой здесь операцией. Это не обязательно для правильной работы кода, но делает его немного более прозрачным.
Действие с скобками, конечно, можно поместить прямо в команду print()
:
print(((10+10)*2) / (1+3))
10.0
Типы данных в Python
До сих пор мы использовали два типа данных и, следовательно, переменных. Первая переменная хранит текст, обычно более технически называемый текстовой строкой или строкой . Это просто набор символов, который интерпретируется программой таким образом. Позже мы рассмотрим строки более подробно, а сейчас давайте более подробно рассмотрим числа. В приведенных выше примерах мы использовали целые числа, но Python также использует числа с плавающей запятой , используя точку вместо запятой.
Давайте проверим, как работать с числами с плавающей запятой и объединять их с целыми числами:
1.2+1.0
2.2
1.2+1
2.2
1.0+1
2.0
Как видите, если хотя бы одно из чисел является числом с плавающей запятой, результат представляется как число с плавающей запятой. Это также относится к ситуациям, когда мы представляем целые числа как числа с плавающей запятой (например, 1.0
).
Во многих языках программирования (например, Java, C), когда мы вводим в программу новую переменную, мы должны объявить ее тип. В Python тип получается из присвоенных значений (помните, что переменная указывает только на объект, хранящий значение). Мы можем проверить тип переменных, а точнее значения, указанные переменными, с помощью команды type()
:
a = 1
b = 1.0
c = a+b
d = a/a
e = "tekst"
print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))
<class 'int'>
<class 'float'>
<class 'float'>
<class 'float'>
<class 'str'>
Тип int
означает целое число , число float
с плавающей запятой и строку str
( string ). Обратите внимание, что результатом деления является число с плавающей запятой, даже если оба числа, используемые в операции, являются целыми числами.
Возможно присвоение значений нескольким переменным в одной строке:
a, b, c, d = 1, 1.0, 5, "Ala"
print(a)
print(b)
print(c)
print(d)
1
1.0
5
Ala
Однако это не способствует ясности кода, особенно когда переменные принимают данные разных типов.
Следующий тип — логический тип, также известный как логический тип. Он может принимать одно из двух значений: True
(истина) или False
(ложь). Вопреки тому, что может показаться в начале изучения программирования, это чрезвычайно полезно и важно. Более подробно мы обсудим это позже в курсе, а пока ограничимся основной информацией.
prawda = True
print(prawda)
True
type(prawda)
bool
Функция bool()
позволяет преобразовать значение в логический тип. Обратите внимание, что 0
он преобразуется в False
, другие числа в True
. Строка преобразуется в True
.
print(bool(1))
print(bool(0))
print(bool(-17))
print(bool())
print(bool('DNA'))
print(bool(False))
print(bool('False'))
True
False
True
False
True
False
True
Рассмотрим, почему последняя команда вернула значение True
.
Кстати, стоит отметить, что в приведенном выше коде print()
мы не помещаем значение или имя переменной в пару скобок, сопровождающую функцию. Вместо этого мы вводим вызов другой функции ( bool()
). Функция bool()
возвращает значение, которое передается непосредственно в функцию print()
.
Преобразование данных
Выше мы вызвали команду bool()
, которая преобразовывала заданные значения в логический тип. Также возможны преобразования в другие типы. Для этого используются следующие команды: int()
— для целых чисел, float()
— для чисел с плавающей запятой, str()
для строк.
Давайте посмотрим, как это работает:
a = 1
print(type(a))
b = float(a)
print(b)
print(type(b))
c = bool(a)
print(c)
print(type(c))
d = str(a)
print(d)
print(type(d))
e = float("1")
print(e)
print(type(e))
f = "7"
print(f)
print(type(f))
g = int(f)
print(g)
print(type(g))
<class 'int'>
1.0
<class 'float'>
True
<class 'bool'>
1
<class 'str'>
1.0
<class 'float'>
7
<class 'str'>
7
<class 'int'>
Теперь проверьте:
f = int("DNA")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<python-input-11-83a0f7f10596> in <module>
----> 1 f = int("DNA")
ValueError: invalid literal for int() with base 10: 'DNA'
Как видите, числовые тексты в данном случае не удались DNA
, что не должно вызывать удивления.
Неточные значения
При расчете вы можете столкнуться со странным результатом:
1.0 - 1.1
-0.10000000000000009
Мы должны были получить -0.1
, и мы это сделали -0.10000000000000009
. Это «условие», возникающее в результате того, как компьютер хранит числа, и ни в коем случае не ограничивается Python. Подробнее об этом можно прочитать в документации Python: https://docs.python.org/3/tutorial/floatingpoint.html .
Округление чисел
Один из способов справиться с подобными случаями — округлить числа. Это также один из способов отображения чисел без ненужного расширения десятичной части чисел с плавающей запятой. Это можно сделать с помощью функции round()
:
print(round(3.1415926535))
print(round(3.1415926535, 3))
liczba = 10/7
print(liczba)
zaokraglona = round(liczba)
print(zaokraglona)
zaokraglona_2 = round(liczba, 2)
print(zaokraglona_2)
3
3.142
1.4285714285714286
1
1.43
Как видно в примерах выше, функции round()
можно передать число с плавающей запятой (или переменную), тогда число будет округлено до целого значения. Вы также можете дополнительно передать число (после десятичной точки), указывающее, до скольких десятичных знаков должно быть округлено число с плавающей запятой.
Имена переменных
При выборе подходящих имен для переменных следует следовать определенным правилам. Некоторые из них обязательны для того, чтобы программа вообще работала, другие — это хорошие практики, обеспечивающие читаемость кода.
Основные правила, которые необходимо соблюдать, следующие:
- Имя переменной может состоять из букв, цифр и символов подчеркивания (
_
), также называемых символами подчеркивания. - Имя переменной не может содержать пробелов (это следует из вышесказанного, но стоит подчеркнуть)
- Имя переменной не может начинаться с цифры, т. е. оно может начинаться с буквы или подчеркивания.
- Избегайте слов , зарезервированных в Python для целей программирования ( ,
False
,def
,if
,raise
,None
,del
,import
,return
,True
,elif
,in
,try
, ,and
, ,else
,is
,while
,as
,except
,lambda
,with
, , ,assert
,finally
,nonlocal
,yield
, , , , ) и встроенных функций имен , , )break
for
not
class
from
or
continue
global
pass
print
type
- Python различает множество букв, например
family
, Family ,FAMILY
разные строки символов и, например, разные имена переменных.
Следующие правила позволяют вам сохранить, среди прочего: читаемость кода и соблюдение соглашений об именах Python:
- Имена переменных должны четко определять хранимые значения. Не поддавайтесь искушению, особенно при написании длинных и сложных программ, давать переменным короткие имена, которые ничего не значат. Например, если вы хотите сохранить название вида, пусть переменная будет называться
gatunek
илиnazwa_gatunku
, а неg
лиng
. Когда вы пишете программу, вы будете знать, что происходит, возможно, вы даже сэкономите несколько секунд на наборе текста на клавиатуре, но когда вы вернетесь к коду через несколько дней, недель или месяцев, вы, вероятно, потратите впустую гораздо больше времени будет пытаться выяснить, что означают такие имена, какng
, илиz
, особенно если вы также решите «экономить время», не записывая комментарии к коду (подробнее об этом позже). - Имя переменной не должно быть слишком общим, но и не должно быть слишком длинным. Необходимо найти баланс между слишком общими названиями и слишком длинными, но точными именами.
- Если имя состоит из нескольких слов, Python использует подчеркивание для их разделения. Следовательно, переменная, хранящая имя последовательности белка, должна называться, например,
nazwa_sekwencji_bialka
неnazwasekwencjibialka
(нечитаемо) илиnazwaSekwencjiBialka
(читабельно, а скорее принято, например, в Java, иначе см. ниже). - Имена переменных не должны содержать заглавные буквы.
- Избегайте использования букв, выходящих за рамки основного набора, принятого для английского языка, в том числе: «Польские буквы»
ą
, и т. д. Поэтому назовите переменную,ó
а не . Вы также можете просто использовать английские имена, особенно если ваш код смогут прочитать люди, не говорящие по-польски.Ż
roznica
różnica
Позже мы обсудим соглашения об именах для других элементов языка, таких как классы, функции и константы.