Тип - множество значений и операций над ними. Мы не будем в коде указывать типы данных, хотя в последних версиях питона это стало возможно. Тем не менее, у типов есть названия, их можно использовать в коде для создания значений этих типов.
int
- целые, float
- вещественные, complex
- комплексные.
Литералы - это записи значений типа:
# литералы int
1
10
42
-5
# литералы float
1.5
1.0
1.
5.7121e4 # e4 = * 10^4, записано 57121
# комплексные числа
1 + 2J
1 - 2j
3j
1j
1j
Можно использовать функцию type, чтобы узнать тип выражения:
print(type(1.5))
print(type(1))
<class 'float'> <class 'int'>
print(15 + 7)
print(15 - 7)
print(15 * 7)
print(15 / 7) # просто деление
print(15 // 7) # целочисленное деление
print(15 % 7) # остаток
print(abs(-6))
print(int(5.6)) # преобразование в int
print(float(42)) # преобразование в float
print(int("13")) # можно так превращать строки в число
print(3 ** 4) # степень
print(101 ** 100) # целые числа могут быть произвольной точности!!!
print(101. ** 100) # а вот вещественные числа хранятся в обычной плавающей форме IEEE 754
22 8 105 2.142857142857143 2 1 6 5 42.0 13 81 270481382942152609326719471080753083367793838278100277689020104911710151430673927943945601434674459097335651375483564268312519281766832427980496322329650055217977882315938008175933291885667484249510001 2.704813829421526e+200
У него всего два значения True
и False
.
Операции:
print(True and False)
print(True or False)
print(not True)
print(True != False) # аналогично xor
False True False True
В тип bool
можно превратить всё что угодно:
print(bool(0))
print(bool(1))
print(bool(42))
print(bool(-42))
print(bool(0.))
print(bool(1.5))
print(bool(""))
print(bool("abc"))
False True True True False True False True
При этом в False превращаются нули, пустые строки, пустые списки и т.п. Эта возможность часто используется в логических условиях:
if "abc": # это True
print("abc")
abc
Рекомендую избегать превращение всего подряд в bool, лучше в условиях писать логические выражения.
Эти операции для двух чисел (и не только!) выдают логический результат
print(1 < 2)
print(1 > 2)
print(1 <= 2)
print(1 >= 2)
print(1 == 2) # сравнение, что объекты имеют одинаковое содержимое
print(1 != 2)
print(1 is 2) # сравнение, верно ли что объекты совпадают
print(1 is not 2) # не совпадают
print(1 <= 2 <= 4) # проверяется, что выполняются все написаные сравнения
True False True False False True False True True
Можно комбинировать логические операции и сравнения, обратите внимание на использование (не использование) скобок:
1 <= 3 and (4 >= 5 or 10 <= 128)
True
Тип str. строка - это последоваткльность символов. В Python 3 символы - это символы стандарта Unicode. Функция str может превратить в строку всё что угодно:
str(10)
'10'
str(True)
'True'
Литералы строк:
'abc'
"abc" # нет разницы, какие кавычки
"abc" 'xyz' # два литерала подряд объединяются в одну строку
#"abc" s - так нельзя, даже если s - это строка
""" asd;fjasl;dkfj
asdflk;ja sdl;fkj
asdfl; askdjf l;asd
""" # текст в тройных кавычках можно писать в несколько строк.
# Переводы строк(line) сохраняются внутри строк(string)
'''asdfsd
sdfl;gjsdl;fg
''' # одинарные кавычки работают так же
f'В таких строках можно вычислять выражения {1 + 1}' # содержимое фигурных скобок вычисляется
'В таких строках можно вычислять выражения 2'
f'{1 + 1} = {3 - 1}'
'2 = 2'
x = 42
f"x = {x}"
'x = 42'
Используйте это вместо оператора % и функции format.
Для задачи о квадратном уравнении, можно вписать в фигурные скобки :.2f
f"pi = {22/7:.3f}"
'pi = 3.143'
В литералах строк могут встречаться экранированные символы. Они начинаются на символ обратного слэша \
print("Hello\nWorld!")
print("Hello\tworld")
Hello World! Hello world
Здесь \n
воспринимается как один символ перевода строки (10 в ASCII). А \t
символ табуляции
# при вычислении длины строки такие символы воспринимаются как один
len("abc\t")
4
Можно вставить unicode символ по его коду. Для этого используется \u
и
четыре шестнадцатеричных цифры.
print("Это греческая буква хи: χ. Она же с помощью кода: \u03C7")
Это греческая буква хи: χ. Она же с помощью кода: χ
"χ" == "\u03C7"
True
Еще иногда нужны вот такие экранированные символы:
print("символ \\ и символ \"")
символ \ и символ "
Без экранирования кавычки python решит, что в этом месте закончилась строка.
Итого, символ \
изменяет смысл следующего символа или символов.
В python есть "сырые" строки. В них экранирование не работает. Сырые строки начинаются с буквы r
:
print(r"\n это перевод строки, а \u03C7 это буква хи")
\n это перевод строки, а \u03C7 это буква хи
Такие строки часто используются для записи регулярных выражений, потому что в них обычно много обратных слешей, и иначе их бы пришлось все экранировать.
Форматные и сырые строки можно совмещать:
x = 42
print(rf"\\\\ \n x = {x}")
\\\\ \n x = 42
С тройными кавычками сырые строки тоже совместимы.
print(len("abc")) # длина строки
print("abc" + "xyz" + "1") # конкатенация строк
# любое значение любого типа превращается в строку функцией str()
print(str(42) + " " + str(2 == 2)) # "42 True"
# есть похожая функция repr
print(repr(42)) # Она превращает в строку, но обычно с большим количеством
# информации о значении, чем метод str()
print("abc" * 3) # повторение строки умножением
print("""слово еще одно слово
и еще несколько слов на другой строке
""".split()) # список слов (см. далее, что такое список)
# split считает, что слова разделены пробелами, переводами строк,
# но можно и явно указать разделитель:
print("3+4+5+6".split('+')) # разделили по плюсу
# хотя мы еще не изучали списки, пример обратной функции, объединения слов:
print(', '.join(['слово1', 'слово2', 'слово3'])) # получаем строку
print("abc".upper()) # к верхнему регистру
print("AbC".lower()) # к нижнему регистру
print("word word".title()) # первая заглавная, остальные строчные
print("word word".capitalize()) # первая заглавная, остальные строчные
# в разных языках эти функции работают по-разному
print("istambul".capitalize())
print("abc".endswith("bc")) # проверка, кончается на
print("abc".startswith("bc")) # проверка, начинается на
print(" abc \n".strip()) # удалить пробелы и переводы строк из начала
# и конца строки. Есть еще lstrip и rstrip, удаляют только слева или
# только справа. Можно указать, какие символы удалять из начала и конца:
print("+*+*+abc*+*+*+".strip('+*'))
print("abc".rjust(6)) # добавить пробелы слева до ширины 6.
print("abc".ljust(6, '#')) # можно указать ширину и символ заполнения
print("sbc".isalpha()) # проверка, что все символы это буквы
print("123".isdigit()) # проверка, что все символы это цифры
print("Abc".islower()) # проверка, что все нижнего регистра
print("Abc".isupper()) # проверка, что все верхнего регистра
3 abcxyz1 42 True 42 abcabcabc ['слово', 'еще', 'одно', 'слово', 'и', 'еще', 'несколько', 'слов', 'на', 'другой', 'строке'] ['3', '4', '5', '6'] слово1, слово2, слово3 ABC abc Word Word Word word Istambul True False abc abc abc abc### True True False False
Таких функций еще много, смотрите их по ссылке методы строк (английский) или методы строк (русский).
Функции можно комбинировать:
print("abc".upper().startswith("A")) # верно
True
"abc".upper()
- это строка, поэтому с ней можно сделать любое из описанных выше действий.
s = "abc"
s.lower() == s or s.upper() == s
True