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

Обновлено: 05.07.2024

Вводится целое число. Вывести число, обратное введенному по порядку составляющих его цифр. Например, введено 3425, надо вывести 5243.

Алгоритм:

  1. Найдем остаток от деления на 10 исходного числа. Тем самым получим последнюю его цифру.
  2. Добавим эту цифру к новому числу.
  3. Разделим нацело на 10 исходное число. Тем самым избавимся от последней цифры в нем.
  4. Снова найдем остаток от деления на 10 того, что осталось от первого числа. Запомним эту цифру.
  5. Умножим на 10 второе число. Тем самым увеличим его разрядность до двух и сдвинем первую цифру в разряд десятков.
  6. Добавим к полученному второму числу запомненную ранее цифру из первого числа.
  7. Будем повторять действия п. 3-6 пока исходное число не уменьшится до нуля, т. е. пока не избавимся от всех его разрядов.

Примеры выполнения кода:

Приведенный алгоритм решения является математическим, он универсален для большинства языков. Однако средства Python позволяют решить подобную задачу более практично. Так у списков есть метод reverse(), позволяющий изменять порядок элементов на обратный. Мы можем получить из исходной строки список символов, выполнить его реверс, после чего с помощью строкового метода join() опять собрать в единую строку.

Также можно воспользоваться взятием среза из исходной строки с первого до последнего символас обратным шагом:

Ч исла в Python (как и в других языках программирования) чрезвычайно простое понятие. В Python все переменные представляют собой объекты и размещаются в динамической памяти.

Базовый набор Python содержит следующие типы чисел:

  • целые ( int );
  • вещественные ( float ) [с десятичной точкой];
  • комплексные ( complex ) [состоят из действительной и мнимой части].

Над числами в Python можно выполнять самые обычные математические операции: сложение ( + ), вычитание ( - ), возведение в степень ( ** ) и т.д.

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

В Python любое число, состоящее из десятичных цифр без префикса, интерпретируется как десятичное число типа int .

>>> 0 0 >>> 20 20 >>> -20 -20 >>> type(20) >>> 100 + 20 120

Целые числа в Python представлены только одним типом — PyLongObject , реализация которого лежит в longobject.c , а сама структура выглядит так:

Любое целое число состоит из массива цифр переменной длины, поэтому в Python 3 в переменную типа int может быть записано число неограниченной длины. Единственное ограничение длины — это размер оперативной памяти.

>>> 134523345234252523523478777 ** 2 18096530413013891133013347014216107772438771969415729

Целые числа могут записываться не только как десятичные, но и как двоичные, восьмеричные или шестнадцатеричные. Для этого перед числом нужно написать символы:

  • 0b (0B) – для двоичного представления;
  • 0o (0O) – для восьмеричного представления;
  • 0x (0X) – для шестнадцатеричного представления.

Вещественные числа (float)

Еще такие числа называют числами с плавающей точкой . Это числа, содержащие точку (десятичный разделитель) или знак экспоненты.

>>> 1.5 1.5 >>> type(1.5) >>> 3. 3.0 >>> .5 0.5 >>> .4e7 4000000.0 >>> type(.4e7) >>> 4.1e-4 0.00041

Числа типа float — неточны (из-за представления чисел с плавающей запятой в компьютере).

>>> 0.3 + 0.3 + 0.3 + 0.1 0.9999999999999999

Информацию о точности и внутреннем представлении float для вашей системы можно получить из sys.float_info

>>> import sys >>> sys.float_info sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

Если нужна высокая точность обычно используют модули Decimal и Fraction.

Об ограничениях и подводных камнях в работе с числами с плавающей точкой описано тут .

Комплексные числа (complex)

Комплексные числа представляют собой пару значений типа int или float , и имеют вид + j .

Отдельные части комплексного числа доступны через атрибуты real и imag

>>> num = 1.1+2j >>> num.real, num.imag (1.1, 2.0)

Операции с числами

Является ли переменная числом

Любую переменную можно проверить на тип (int, float или complex):

n = 10 >>> if type(n) == int: print("This is int") This is int

Если вы хотите проверить, находится ли в строке число, воспользуйтесь методом isdigit()

>>> string = "404" >>> string.isdigit() True

Однако стоит помнить, что метод isdigit() не работает для отрицательных чисел и чисел с плавающей точкой.

Также для проверки на число, можно написать собственную функцию:

>>> def isInt(value): try: int(value) return True except ValueError: return False >>> isInt(123) True >>> isInt("qwerty") False >>> isInt("123") True >>> isInt("-123") True >>> isInt("123.2") False

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

  • x + y — сложение;
  • x - y — вычитание;
  • x * y — умножение;
  • x / y — деление;
  • x // y — целочисленное деление;
  • x % y — остаток от деления;
  • x ** y — возведение в степень;
  • -x — смена знака;
  • abs(x) — модуль числа;
  • divmod(x, y) — возвращает кортеж из частного и остатка от деления x на y;
  • pow(x, y[, z]) — возведение числа в степень (z — деление по модулю);
  • round(x[, ndigits]) — округление числа (ndigits - знаки после запятой).

Сравнение чисел

  • x == y — равно;
  • x != y — не равно;
  • x > y — больше;
  • x — меньше;
  • x >= y — больше или равно;
  • x — меньше или равно.

Преобразования

  • int(x) — преобразование в целое число int ;
  • float(x) — преобразование в число с плавающей точкой float ;
  • complex(x) — преобразование в комплексное число complex ;
  • bin(x) — целое числа в двоичную строку;
  • oct(x) — целое число в восьмеричную строку;
  • hex(х) — целое число в шестнадцатеричную строку;
  • [int(x) for x in str(123)] — перевод целого числа 123 в список цифр этого числа;
  • int(''.join(str(digit) for digit in [1,2,3])) — перевод списка цифр [1,2,3] в целое число 123;
  • str(x) — число в строку;

Ввод чисел

Для ввода данных в программу на языке Python используется функция input() . Эта функция считывает то что вы ввели на клавиатуре, и записывает эти данные в переменную в виде одной строки. После этого, перевести строку в число можно простыми функциями int() , float() или complex() .

Если нужен список чисел, введите несколько чисел через пробел и выполните:

my_list = [int(x) for x in input().split()] print(my_list) > [1, 2, 3]

Вывод чисел

Для вывода числа используйте print() :

>>> print(1) 1 >>> print(-1.2) -1.2 >>> print(1, 3, 4) 1 3 4

На практике возникают ситуации, когда нужно вывести число вместе со строкой (например пояснить, что означает число). Существует несколько вариантов сделать это:

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


Но числа в Python — это гораздо больше, чем, собственно, их числовые значения. Поговорим о трёх особенностях чисел в Python, с которыми вы, возможно, не знакомы.

№1: у чисел есть методы

В Python практически всё — это объект. Один из первых объектов, о котором узнаёт тот, кто начинает изучать Python — это str , используемый для представления строк. Возможно, вы сталкивались с использованием методов строк, вроде .lower() , который возвращает новую строку, все символы которой приведены к нижнему регистру:

Числа в Python тоже, как и строки, являются объектами. У них тоже есть методы. Например, целое число можно преобразовать в байтовую строку с помощью метода .to_bytes() :

А вот если записать в n число 256 и вызвать для него . to_bytes() с параметром length=1 , будет выдана ошибка OverflowError :

Преобразовать байтовую строку в целое число можно, воспользовавшись методом .from_bytes() класса int :

Методы класса вызывают, используя имя класса, а не его экземпляр. Именно поэтому в предыдущем примере метод .from_bytes() вызывают, обращаясь к int .

Один из способов представления числа 1729 в виде суммы двух кубов — это 1 3 + 12 3 . Можете отыскать второй способ?

У чисел с плавающей точкой тоже есть методы. Возможно, самый полезный из них — это .is_integer() . Его используют для проверки того, есть ли у числа с плавающей точкой дробная часть:

Вот — интересный метод .as_integer_ratio() . Он, вызванный для числа с плавающей точкой, возвращает кортеж, содержащий числитель и знаменатель дроби, представляющей это число:

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

Если надо — можно вызывать методы на числовых литералах, заключённых в круглые скобки:

Если обойтись без скобок — при попытке вызова метода на целочисленном литерале будет выдана ошибка SyntaxError . А вот при вызове метода числового литерала с плавающей точкой отсутствие скобок, что странно, не приведёт к ошибке:

Полный список методов числовых Python-типов можно найти в документации.

№2: числа обладают иерархией

В математике числа обладают естественной иерархией. Например, все натуральные числа являются целыми, а все целые числа — рациональными. Все рациональные числа — это вещественные числа, а все вещественные числа — это комплексные числа.

Числовая башня

Все числа в Python являются экземплярами класса Number :

Если нужно узнать о том, является ли некое Python-значение числовым, но при этом неважно то, каким именно числовым типом оно представлено, воспользуйтесь конструкцией isinstance(value, Number) .

В Python имеется четыре дополнительных абстрактных типа, иерархия которых, начиная с наиболее общего числового типа, выглядит так:

Класс Complex используется для представления комплексных чисел. Тут имеется один встроенный конкретный тип — complex .

Класс Real — это представление вещественных чисел. Его единственный встроенный конкретный тип — float .

Класс Rational представляет рациональные числа. Его единственным встроенным конкретным типом является Fraction .

Класс Integral применяют для представления целых чисел. В нём имеется два встроенных конкретных типа — int и bool .

Так, погодите, а значения типа bool — это разве числа? Да — числа. Можете это проверить, воспользовавшись REPL:

Всё это, на первый взгляд, выглядит вполне нормально. Правда, порядок несколько нарушает то, что значения типа bool являются числами.

Странность Python: так как тип bool относится к классу Integral (на самом деле он — прямой наследник int ), со значениями True и False можно вытворять довольно необычные вещи.

Например, True можно использовать в роли индекса для того чтобы получить второй элемент итерируемого объекта. А если поделить число на False — будет выдана ошибка ZeroDivisionError .

Но если присмотреться к числовым типам поближе, окажется, что в иерархии Python-чисел имеется пара своеобразных моментов.

Числа типа Decimal не укладываются в иерархию

Можно предположить, что числа типа Decimal являются наследниками Real , но это, на самом деле, не так:

Единственный класс, наследником которого является класс Decimal — это Number :

Логично то, что класс Decimal не является наследником Integral . В некоторой степени смысл есть и в том, что Decimal не является наследником Rational . Но почему Decimal не является наследником Real или Complex ?

Объекты Decimal обладают всеми методами, определёнными в классе Real, но эти объекты не должны регистрироваться в виде наследников Real, так как Decimal-числа не взаимодействуют с двоичными числами с плавающей точкой (например, результат операции Decimal('3.14') + 2.71828 не определён). Но ожидается, что числа, классы которых являются наследниками абстрактного класса Real, способны взаимодействовать друг с другом (то есть — R1+R2 должно вычисляться в том случае, если числа R1 и R2 представлены типами, являющимися наследниками Real).

Получается, что объяснение странностей сводится к особенностям реализации.

Числа с плавающей точкой — странные создания

Числа с плавающей точкой хранятся в памяти в виде двоичных дробей. Это приводит к появлению некоторых проблем. Например, у дроби 13 нет конечного десятичного представления (после десятичной точки идёт бесконечное множество троек). А у дроби 110 нет конечного представления в виде двоичной дроби.

Другими словами, в компьютере нельзя совершенно точно представить число 0,1 — если только этот компьютер не обладает бесконечной памятью.

В общем, числа с плавающей точкой — странные создания.

№3: набор числовых типов Python можно расширять

Абстрактный числовой базовый тип Python позволяет программисту создавать собственные абстрактные и конкретные числовые типы.

В качестве примера рассмотрим класс ExtendedInteger , который реализует числа в форме a+bp, где a и b — целые числа, а p — простое число (обратите внимание: класс не обеспечивает то, что число p является простым):

Для того чтобы обеспечить правильность реализации интерфейса Real конкретным типом — нужно создать реализации множества методов, в именах которых есть два символа подчёркивания. Ещё нужно поразмыслить о том, как методы вроде .add() и .mul() взаимодействуют с другими типами, являющимися наследниками Real .

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

При наличии реализации ExtendedInteger можно заниматься следующими вычислениями:

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

В документации по Python можно найти несколько советов по реализации собственных типов, которые стоит прочесть тому, кто решит заняться созданием собственных числовых типов. Такому человеку ещё полезно будет ознакомиться с реализацией Fraction .

Итоги

Вот — те три особенности Python-чисел, которые мы здесь обсуждали:

У чисел есть методы, как и у практически всех остальных объектов в Python.

Числа обладают иерархией, даже несмотря на то, что их чёткие взаимоотношения несколько портит наличие типов Decimal и float .

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

Может быть, вы узнали из этого материала не только об этих особенностях чисел, но и ещё о чём-нибудь, что вам пригодится.

О, а приходите к нам работать? 😏

Мы в wunderfund.io занимаемся высокочастотной алготорговлей с 2014 года. Высокочастотная торговля — это непрерывное соревнование лучших программистов и математиков всего мира. Присоединившись к нам, вы станете частью этой увлекательной схватки.

Мы предлагаем интересные и сложные задачи по анализу данных и low latency разработке для увлеченных исследователей и программистов. Гибкий график и никакой бюрократии, решения быстро принимаются и воплощаются в жизнь.

Hung1337

9кл. ПАСКАЛЬ, integer Составьте матрицу 4x6 из случайных чисел в промежутке от (-5 до 20), выведите ответ

9кл. ПАСКАЛЬ, integer Составьте матрицу 3х4 в промежутке случ.чисел (-5 до 5), найти произведение эл.массива (произведение =48)

Задача №1698. Гомо или гетеро? Максимальное время работы на одном тесте: 3 секунды Максимальный объем используемой памяти: 256 мегабайт Определим две … операции над списком целых чисел: insert number – добавляет заданное число в конец списка delete number – удаляет первое вхождение заданного числа из списка. Если список не содержит заданного числа, то ничего не меняется. Например, результатом добавления числа 4 в список [1, 2, 1] будет список [1, 2, 1, 4]. Если мы удалим число 1 из этого списка, то получим список [2, 1, 4], но если мы попытаемся удалить число 3 из списка [1, 2, 1, 4], то список останется неизменным. Список называется гомогенным, если он содержит хоты бы два одинаковых числа и гетерогенным, если содержит хотя бы два различных числа. Например, список [2, 2] является гомогенным, список [2, 1, 4] – гетерогенным, список [1, 2, 1, 4] – одновременно и тем и другим, а пустой список не является ни гомогенным, ни гетерогенным. Напишите программу, которая по последовательности операций добавления и удаления в пустой список, определяет после каждой из операций, является ли список гомогенным или гетерогенным. Формат входных данных Первая строка содержит целое число n – количество операций (1 ≤ n ≤ 100 000). Следующие n строк содержат описания операций. Каждая операция описывается словом “insert” или “delete” и числом k – аргументом операции (-109 ≤ k ≤ 109). Формат выходных данных Для каждой операции выведите строку, содержащую единственное слово, описывающее состояние списка после этой операции: “both” - если список одновременно является и тем и другим “hetero” - если список является гетерогенным “homo” - если список является гомогенным “neither” - если список не принадлежит ни одному типу. На питоне!СРОЧНО!

Читайте также: