Учебник по математическим вычислениям

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом разделе рассматриваются математические вычисления.

Типы чисел

В Python есть 4 типа чисел:

  • Булевы значения (Booleans)
  • Целые числа (Integers)
  • Числа с плавающей точкой (Floating point)
  • Комплексные числа (Complex, мнимые числа)

Булевы значения (bool)

Булевы значения имеют два значения: True (истина), False (ложь).

a = True
b = False

Числово, они оцениваются как целые числа со значением 1, 0.

c = 4 + True ## 5
d = False
if d == 0:
    print('d is False')

Но не пишите код так. Это будет странно.

Целые числа (int)

Значения со знаком произвольного размера и основания:

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)     Абсолютное значение

Числа с плавающей точкой (float)

Используйте десятичную или экспоненциальную запись для указания значения с плавающей точкой:

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.

Упражнение 1.7: Ипотека Дэва

Дэйв решил взять 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.

Упражнение 1.8: Дополнительные платежи

Предположим, что Дэвид платит дополнительно 1000 долларов в месяц за первые 12 месяцев ипотеки?

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

При запуске новой программы она должна показать общую выплату в размере 929965.6199999959 за 342 месяца.

✨ Проверить решение и практиковаться

Упражнение 1.9: Создание калькулятора дополнительных платежей

Измените программу так, чтобы информация о дополнительных платежах могла быть обработана более общим образом. Дайте возможность пользователю задавать эти переменные:

extra_payment_start_month = 61
extra_payment_end_month = 108
extra_payment = 1000

Сделайте так, чтобы программа учитывала эти переменные и рассчитывала общую сумму платежа соответствующим образом.

Сколько заплатит Дэвид, если он будет платить дополнительно 1000 долларов в месяц в течение 4 лет, начиная после того, как первые пять лет уже будут выплачены?

✨ Проверить решение и практиковаться

Упражнение 1.10: Создание таблицы

Измените программу так, чтобы она выводила таблицу, показывающую номер месяца, общую сумму, уже выплаченную, и оставшийся долг. Вывод должен выглядеть примерно так:

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
✨ Проверить решение и практиковаться

Упражнение 1.11: Бонус

Пока вы это делаете, исправьте программу, чтобы устранить переплату, которая возникает в последнем месяце.

✨ Проверить решение и практиковаться

Упражнение 1.12: Тайна

int() и float() можно использовать для преобразования чисел. Например,

>>> int("123")
123
>>> float("1.23")
1.23
>>>

С учетом этого, вы можете объяснить это поведение?

>>> bool("False")
True
>>>

Резюме

Поздравляем! Вы завершили лабораторную работу по числам. Вы можете практиковаться в более лабораторных работах в LabEx, чтобы улучшить свои навыки.