Введение
В этом разделе рассматриваются математические вычисления.
This tutorial is from open-source community. Access the source code
💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал
В этом разделе рассматриваются математические вычисления.
В Python есть 4 типа чисел:
Булевы значения имеют два значения: True
(истина), False
(ложь).
a = True
b = False
Числово, они оцениваются как целые числа со значением 1
, 0
.
c = 4 + True ## 5
d = False
if d == 0:
print('d is False')
Но не пишите код так. Это будет странно.
Значения со знаком произвольного размера и основания:
a = 37
b = -299392993727716627377128481812241231
c = 0x7fa8 ## Шестнадцатеричное
d = 0o253 ## Восьмеричное
e = 0b10001111 ## Двоичное
Общие операции:
x + y Сложение
x - y Вычитание
x * y Умножение
x / y Деление (возвращает вещественное число)
x // y Целочисленное деление (возвращает целое число)
x % y Остаток от деления
x ** y Возведение в степень
x << n Сдвиг битов влево
x >> n Сдвиг битов вправо
x & y Побитовое И
x | y Побитовое ИЛИ
x ^ y Побитовое исключающее ИЛИ
~x Побитовое НЕ
abs(x) Абсолютное значение
Используйте десятичную или экспоненциальную запись для указания значения с плавающей точкой:
a = 37.45
b = 4e5 ## 4 x 10**5 или 400 000
c = -1.345e-10
Числа с плавающей точкой представлены в виде двойной точности с использованием представления процессора IEEE 754. Это то же самое, что и тип double
в языке программирования C.
17 цифр точности
Показатель степени от -308 до 308
Обратите внимание, что числа с плавающей точкой не точны при представлении десятичных дробей.
>>> a = 2.1 + 4.2
>>> a == 6.3
False
>>> a
6.300000000000001
>>>
Это не проблема Python, а базовое оборудование с плавающей точкой на процессоре.
Общие операции:
x + y Сложение
x - y Вычитание
x * y Умножение
x / y Деление
x // y Целочисленное деление
x % y Остаток от деления
x ** y Возведение в степень
abs(x) Абсолютное значение
Это те же операторы, что и для целых чисел, за исключением битовых операторов. Дополнительные математические функции находятся в модуле math
.
import math
a = math.sqrt(x)
b = math.sin(x)
c = math.cos(x)
d = math.tan(x)
e = math.log(x)
Следующие операторы сравнения / отношения работают с числами:
x < y Менее чем
x <= y Менее или равно
x > y Больше чем
x >= y Больше или равно
x == y Равно
x!= y Не равно
Вы можете составлять более сложные булевы выражения, используя
and
, or
, not
Вот несколько примеров:
if b >= a and b <= c:
print('b is between a and c')
if not (b < a or b > c):
print('b is still between a and c')
Имя типа можно использовать для преобразования значений:
a = int(x) ## Преобразует x в целое число
b = float(x) ## Преобразует x в число с плавающей точкой
Попробуйте это.
>>> a = 3.14159
>>> int(a)
3
>>> b = '3.14159' ## Работает и с строками, содержащими числа
>>> float(b)
3.14159
>>>
Напоминание: В этих упражнениях предполагается, что вы работаете в каталоге ~/project
. Ищите файл mortgage.py
.
Дэйв решил взять 30-летнюю ипотеку на 500 000 долларов у корпорации по ипотеке, инвестициям в акции и торговле биткоина Гуйдо. Ставка составляет 5%, а месячный платеж - 2684,11 долларов.
Вот программа, которая вычисляет общую сумму, которую Дэва придется заплатить за весь период ипотеки:
## mortgage.py
principal = 500000.0
rate = 0.05
payment = 2684.11
total_paid = 0.0
while principal > 0:
principal = principal * (1+rate/12) - payment
total_paid = total_paid + payment
print('Total paid', total_paid)
Введите эту программу и запустите ее. Вы должны получить ответ 966279.5999999957
.
Предположим, что Дэвид платит дополнительно 1000 долларов в месяц за первые 12 месяцев ипотеки?
Измените программу, чтобы включить этот дополнительный платеж, и заставьте ее выводить общую сумму, выплаченную, а также количество месяцев, необходимых для погашения ипотеки.
При запуске новой программы она должна показать общую выплату в размере 929965.6199999959
за 342 месяца.
Измените программу так, чтобы информация о дополнительных платежах могла быть обработана более общим образом. Дайте возможность пользователю задавать эти переменные:
extra_payment_start_month = 61
extra_payment_end_month = 108
extra_payment = 1000
Сделайте так, чтобы программа учитывала эти переменные и рассчитывала общую сумму платежа соответствующим образом.
Сколько заплатит Дэвид, если он будет платить дополнительно 1000 долларов в месяц в течение 4 лет, начиная после того, как первые пять лет уже будут выплачены?
Измените программу так, чтобы она выводила таблицу, показывающую номер месяца, общую сумму, уже выплаченную, и оставшийся долг. Вывод должен выглядеть примерно так:
1 2684.11 499399.22
2 5368.22 498795.94
3 8052.33 498190.15
4 10736.44 497581.83
5 13420.55 496970.98
...
308 874705.88 3478.83
309 877389.99 809.21
310 880074.10 -1871.53
Total paid 880074.10
Months 310
Пока вы это делаете, исправьте программу, чтобы устранить переплату, которая возникает в последнем месяце.
int()
и float()
можно использовать для преобразования чисел. Например,
>>> int("123")
123
>>> float("1.23")
1.23
>>>
С учетом этого, вы можете объяснить это поведение?
>>> bool("False")
True
>>>
Поздравляем! Вы завершили лабораторную работу по числам. Вы можете практиковаться в более лабораторных работах в LabEx, чтобы улучшить свои навыки.