Как сравнивать числа в питоне

Как сравнивать числа в питоне

Бесплатные уроки для начинающих по изучению языка программирования Python. Будут рассмотрены: Django и парсинг на Python-e с помощью библиотек

4 сентября 2012 г.

Все что можно делать с числами

Совсем недавно, был наглядно рассмотрен такой тип данных как числа. В данном посте мы рассмотрим как можно болше возможностей работы с числами. Смотрим ниже:

К примеру создадим переменные которые содержат в себе число:
>>>a=3
>>>b=4
Далее будем производить над ними какието действия:

>>>a + 1, a — 1 #сложение (3+1), вычитание (3-1)
(4, 2)

>>>b * 3, b / 2 # умножение, деление
(12, 2.0)

>>>a % 2,b ** 2 # деление по модулю, возведение в степень
(1, 16)

>>>2 + 4.0, 2.0 ** b # смешивание типов.
(6.0, 16.0)

>>> b / 2 + a # ((4 / 2) + 3)
5.0

>>>print(b/(2.0+a)) # (4 / (2.0 + 3))
0.8

>>> num = 1 / 3.0
>>> num # Автоматический вывод
0.33333333333333331
>>> print num # Инструкция print выполняет округление
0.333333333333

>>> “%e” % num # Вывод с использованием выражения форматирования строк
‘3.333333e-001’
>>> ‘%4.2f’ % num # Альтернативный формат представления вещественных чисел
‘0.33’
>>> ‘<0:4.2f>’.format(num) # Метод форматирования строк (Python 2.6 и 3.0)
‘0.33’

>>> num = 1 / 3
>>> repr(num) # Используется для автоматического вывода: в форме как есть
‘0.33333333333333331’
>>> str(num) # Используется функцией print: дружественная форма
‘0.333333333333’

>>> 1
True
>>> 2.0 >= 1 # Больше или равно: число 1 преобразуется 1.0
True
>>> 2.0 == 2.0 # Проверка на равенство значений
True
>>> 2.0 != 2.0 # Проверка на неравенство значений
False

Вводятся три целых числа. Определить какое из них наибольшее.

Пусть a, b, c — переменные, которым присваиваются введенные числа, а переменная m в конечном итоге должна будет содержать значение наибольшей переменной. Тогда алгоритм программы сведется к следующему:

  1. Сначала предположим, что переменная a содержит наибольшее значение. Присвоим его переменной m .
  2. Если текущее значение m меньше, чем у b , то следует присвоить m значение b . Если это не так, то не изменять значение m .
  3. Если текущее значение m меньше, чем у c , то присвоить m значение c . Иначе ничего не делать.

Данную задачу можно решить и без использования четвертой переменной, однако программа будет логически сложнее:

  1. Если a больше b , то проверить больше ли a , чем c . Если это так, то максимальное число содержит переменная a . Если a больше b , но при этом меньше c , то максимальным является значение c .
  2. Иначе (когда a меньше b ) сравнить значения b и c . Большее из них и есть максимальное.

var
a , b , c , max : integer ;
begin
readln ( a , b , c ) ;
max : = a ;
if max then max : = b ;
if max then max : = c ;
writeln ( max ) ;
end .

var
a , b , c : integer ;
begin
readln ( a , b , c ) ;
if a > b then
if a > c then writeln ( a )
else writeln ( c )
else
if b > c then writeln ( b )
else writeln ( c ) ;
end .

main ( ) <
int a , b , c , m ;
scanf ( "%d%d%d" ,& a ,& b ,& c ) ;
m = a ;
if ( m b ) m = b ;
if ( m c ) m = c ;
printf ( "%d
" , m ) ;
>

main ( ) <
int a , b , c ;
scanf ( "%d%d%d" ,& a ,& b ,& c ) ;

if ( a > b )
if ( a > c ) printf ( "%d
" , a ) ;
else printf ( "%d
" , c ) ;
else
if ( b > c ) printf ( "%d
" , b ) ;
else printf ( "%d
" , c ) ;
>

Читайте также:  Гугл кип не синхронизируется

a = int ( input ( ) )
b = int ( input ( ) )
c = int ( input ( ) )

m = a
if m b:
m = b
if m c:
m = c

a = int ( input ( ) )
b = int ( input ( ) )
c = int ( input ( ) )

if a > b:
if a > c:
print ( a )
else :
print ( c )
else :
if b > c:
print ( b )
else :
print ( c )

алг максимум из трех
нач
цел a , b , c , m
ввод a , b , c
m := a
если b > m то m := b все
если c > m то m := c все
вывод m
кон

алг максимум из трех
нач
цел a , b , c
ввод a , b , c
если a > b то
если a > c то
вывод a
иначе
вывод c
все
иначе
если b > c то
вывод b
иначе
вывод c
все
все
кон

input a
input b
input c
max = a
if max then max = b
if max then max = c
print max

input a
input b
input c
if a > b then
if a > c then
print a
else
print c
endif
else
if b > c then
print b
else
print c
endif
endif

Главным отличием вещественных чисел от целых является наличие символа " . " которая отделяет целую часть от дробной:

Причем обратите внимание на числа 2. и .78 , т.е. если Python видит, что слева или справа от точки ничего нет, то он понимает, что либо целая либо дробная часть равна (0).

Другой отличительной чертой является необязательное наличие символа " e " – экспоненты:

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

  • max — максимальное представимое число;
  • max_exp — максимальня степень (2);
  • max_10_exp — максимальное число e, такое что 10**e находится в [min , max] ;
  • min — минимальное представимое число;
  • min_exp — минимальная степень (2);
  • min_10_exp — минимальное число e, такое что 10**e находится в [min , max] ;
  • dig — максимальное число цифр, которыми можно точно отобразить число;
  • mant_dig — максимальное число цифр в radix системе счисления, которыми можно точно отобразить число;
  • epsilon — разность между (1) и наименьшим числом большим (1) которую можно представить как число с плавающей точкой;
  • radix — основание используемой системы счисления;
  • rounds — целочисленная константа определяющая режим округления.

В данном выводе для нас представляют особый интерес значения: max , min , max_10_exp и min_10_exp , которые определяют пределы диапазонов для мантисы и степени, например:

Значения -inf, inf и nan

Тем не менее вместо ошибок OverflowError, когда число выходит за указанные пределы, иногда появляются значения -inf и inf :

Возможно, к появляению ошибки OverflowError приводит только операция возведения в степень (скорее всего, хотя может я и не прав, точные причины возникновения данной ошибки кроются где-то в недрах языка C, на котором реализован интерпретатор CPython). Все что нужно знать о значениях -inf и inf это то что это числа обозначающие плюс минус бесконечность. Да, это на самом деле числа числа с плавающей запятой, которые могут учавствовать в выражениях:

Читайте также:  Logitech options не видит мышь

Однако, что бы вы не делали с бесконечностью, она так и останется бесконечностью. Единственное что можно попробовать, так это вычесть из одной бесконечности другую бесконечность:

И мы получили nan — значение, которое означает неопределяемое число (или "не число"). Но оно ведет себя как число, и в каком бы выражении оно не появилось, результат всегда будет nan (кроме nan/0 т.к. деление на (0) всегда приводит к появлению ошибки):

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

Арифметические операции

Целые числа поддерживают следующие математические операции, которые отсортированы по убыванию приоритета:

Операция Результат Замечание
1 x ** y возводит x в степень y (I)
2 pow(x, y[, z]) возводит x в степень y по модулю z, где z – необязательный аргумент (I)
3 divmod(x, y) возвращает кортеж с парой чисел (x // y, x % y) (II)
4 x.conjugate() возвращает (ar) — число, которое комплексно сопряжено с (x)
5 complex(re, im) преобразует re в комплексное число (по умолчанию im = 0 ) (V)
6 float(x) преобразует x в вещественное число (число с плавающей точкой) (V)
7 int(x) переобразует x в целое число, представленное в десятичной системе счисления (V)
8 abs(x) абсолютное значение (модуль) числа x
9 +x делает число x положительным
10 -x делает число x отрицательным
11 x % y остаток от деления x на y (II)
12 x // y результат целочисленного деления x на y (III) (II)
13 x / y результат "истинного" деления x на y
14 x * y произведение x и y
15 x — y разность x и y
16 x + y сумма x и y

Важно: приоритет математических операций выше побитовых логических операций и операций сравнения.

I. возведение (0) в степень (0) возвращает (1):

Извлечение корней четной степени из отрицательных чисел не вызывает ошибки, а возвращает комплексное число:

Использование в выражении x ** y слишком больших значений x и y типа float может привести к ошибке OverflowError.

II. функция divmod() и операции % , // не работают для комплексных чисел. Для вас это может быть и очевидно, но не пользователя для которого вы пишите программу.

III. Данная операция всегда возвращает целое число, т.е. если число x можно представить в виде d*y + r , то x//y = d (r – остаток от деления). Так же следует иметь ввиду, что результат данной операции всегда округляется в сторону минус бесконечности:

Читайте также:  Отсутствует доступ или не найдена конечная точка

Это немного сбивает с толку, но проверив результат по формуле x = d*y + r , вы убедитесь что все верно.

IV. встроенная функция int() отбрасывает дробную часть вещественных чисел:

V. строго говоря эти функции не являются математическими, но они могут учавствовать в математических выражениях Python и поэтому должны обладать приоритетом.

Операции сравнения

Для сравнения чисел, доступно (8) операций сравнения, причем все они имеют одинаковый приоритет:

Операция Результат Замечание
1 x True если x меньше y, иначе False
2 x True если x меньше или равно y, иначе False
3 x > n True если x больше y, иначе False
4 x >= n True если x больше или равно y, иначе False
5 x == y True если x равно y, иначе False
6 x != y True если x не равно y, иначе False
7 x is y True если x и y это один и тот же объект, иначе False
8 x is not y True если x и y это не один и тот же объект, иначе False

Важно: приоритет операций сравнения ниже математических и побитовых операций.

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

В Python сравнение x > y and y > z является эквивалентным x > y > z т.е. сравнения связаные оператором and в произвольные цепочки могут быть записаны в более компактной форме. Выполнение таких выражений начинается слева направо и останавливается как только будет получено первое значение False. Это означает, что если в выражении x > y > z сравнение x > y вернет False то сравнение y > z выполняться не будет.

Методы вещественных чисел

Вещественные числа – это объекты, которые обладают следующими методами:

Появление таких больших чисел связано с тем, что числа типа float на самом деле не являются десятичными дробями, и хранятся в памяти с небольшой погрешностью:

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

где sign – это необязательный знак, который может быть как + или — ; integer – и fraction – целая и дробная части которые должны обязательно содержать хотя бы по одной цифре, ‘0x’ – уже знакомый нам префикс, обозначающий шестнадцатеричные числа и ‘p’ exponent – экспонента в виде десятичного целого числа со знаком или без.

Показатель степени ‘p’ exponent является степенью двойки, например, перевод числа ‘0x2.f1ap+3’ из шестнадцатеричной системы счисления в десятичную будет выглядеть следующим образом:

Применение обратного преобразования дает другую шестнадцатеричную строку, которая, однако, представляет тоже самое число:

Ссылка на основную публикацию
Как сделать чтобы эксель считал в градусах
В этой практической задаче я покажу вам как при помощи возможностей Excel 2010 найти значение косинуса угла в 136 градусов....
Как разрезать flac на треки в foobar
2. Выделяем нужные треки левой кнопкой мыши. Теперь кликаем правой кнопкой по плейлисту и см. скриншот. 4. Теперь возвращаемся в...
Как распечатать документ pdf из почты
Значок печати в Google Chrome Чтобы распечатать PDF файл нам понадобится: компьютер, принтер, браузер (предпочтительно Google Chrome, Яндекс браузер или...
Как скинуть видео с инстаграмма в вайбер
С появлением социальных сетей у людей появилось много новых возможностей. И речь идёт не только о раскручивании своей личной странички....
Adblock detector