Как перевернуть число в python
Перейти к содержимому

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

5 способов перевернуть строку в Python 3

Создадим функцию reversed1 с аргументом variable , где variable — переменная, хранящая строку, которую мы хотим перевернуть. Так как строка являются неизменяемым объектом, то создадим отдельную, пока что пустую переменную res , которая в будущем будет хранить результат.

В функцию поместим цикл, который будет «прохаживаться» по каждому из элементов строки. Начнем мы с конца строки, используя положительные индексы, соответственно параметр start функции range — len(variable)-1 . -1 потому, что длина строки всегда на 1 больше, чем индекс последнего ее элемента. Закончить мы должны на первом символе строки, поэтому параметр stop функции range() — -1, поскольку перечисляются числа до значения этого параметра, не включительно. Параметр step — -1, потому что мы считаем в обратном порядке.

Теперь заполним тело цикла — проведем конкатенацию между старым значением res и элементом строки с индексом i . Таким образом, при каждой итерации цикла мы добавляем по одному символу к результату. После окончания цикла вернем результат.

2. Использование цикла со списком в результате

Этот способ аналогичен предыдущему, единственное его отличие заключается в типе данных переменной res — здесь она является списком.

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

Функция пока что возвращает список, состоящий из односимвольных элементов. Если нас это не устраивает, то почему бы не преобразовать список в строку при помощи метода join() ? Сделаем это, добавив конструкцию res=».join(res) .

3. Рекурсия

Третий в нашем обзоре способ — рекурсия, как всегда трудная для понимания. Как всегда создаем функцию, но не спешим помещать туда цикл.

Начну объяснение с конца. Если мы записали в результат все символы кроме первого, то длина оставшейся строки равна единице и, следовательно, ее нужно вернуть. Получаем:

Но если длина строки больше одного, то нужно вернуть последний из ее элементов и вызвать эту же функцию, но уже отрезав последний символ. Сделать это мы можем с помощью среза variable[:-1] . Обновим картину:

Использование else: здесь необязательно, так как после возвращения чего-либо этой функцией она завершится. Поэтому конструкцию return variable[-1] + reverse3(variable[:-1]) можно поместить напрямую в тело функции. Конечный вариант решения:

4. Использование встроенной функции

В Python 3 встроена специальная функция reversed() , в качестве аргумента она принимает список или строку, а возвращает итератор последовательности значений, состоящей из всех элементов аргумента в обратном порядке.

Простыми словами — недостаточно написать res = reversed(variable) , данные нужно преобразовать в нужный тип (в нашем случае — в строку). Сделать мы это можем при помощи метода join() , соединив последовательность через пустую строку. После выполненных действий возвращаем результат. Код:

5. Срез строки

Можете представить способ перевернуть строку, который был бы короче названия функции? А я могу!

Срез строки — вещь прекрасная, но порой пугающая новичков «уплотненным» синтаксисом. Срез содержит три параметра — [start:stop:step], аналогично функции range() . Подробнее о них вы можете прочитать в других статьях на Хабре.

Для способа с использованием срезов не нужно даже создавать функцию, только зря строки и время потратите. Все элементарно — присвоим параметру step значение -1 и пропустим два других параметра, происходит магия — строка переворачивается:

Конечно, никакой магии здесь нет, мы просто перебираем символы с шагом -1, то есть в обратном порядке.

Заключение

Первый и второй способы как нельзя лучше подходят, если во время переворота строки нужно ее изменять. При этом они значительно уступают 4 и 5 способам в скорости. Читаются умеренно хорошо, поэтому в некоторых случаях их уместно использовать.

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

Четвертый способ довольно быстрый, отлично читается и подходит во многих случаях.

Пятый способ — самый быстрый, хорошо читается, очень краткий (6 символов), поэтому его я считаю наиболее предпочтительным.

Сравнительную таблицу скорости некоторых способов вы можете найти по ссылке — https://python-scripts.com/reversed

Если знаете что-либо еще по этой теме, хотите меня поправить или дать идею — пишите в комментариях, я все прочту и приму к сведению. Удачи!

Python: инвертирование числа без преобразования в строку

В этом посте о программировании на Python я покажу вам, как инвертировать целое число (например, преобразовать 123 в 321), но без использования строковых функций или преобразования в строку.

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

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

Функция Python

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

Функция получает число и возвращает то же число в перевернутом виде.

В принципе, строка 8 могла бы выглядеть так: n = n // 10

Собираем все вместе

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

Когда вы запускаете его, результат правильный. Помните, что он работает только с целыми числами. Чтобы заставить его работать с плавающими числами, может быть полезна функция modf, которая разделяет целую и десятичную части.

Можно помощь в Python Коде.

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

Введите первое число: 102.12

Введите второе число: 123.34

Первое число наоборот: 201.21

Второе число наоборот: 321.43

def reverse_float(num):
parts = str(num).split(‘.’)
reversed_parts = [».join(reversed(part)) for part in parts]

return float( ‘.’.join(reversed_parts) )

a = reverse_float(input(‘a’))
b = reverse_float(input(‘b’))

print(‘rvs a’, a)
print(‘rvs b’, b)
print(‘total’, a + b)

Задача 5. Наименьший делитель

Дано натуральное число n>1. Напишите функцию, которая находит его наименьший делитель, отличный от 1.

Введите число: 6

Наименьший делитель, отличный от единицы: 2

Введите число: 17

Наименьший делитель, отличный от единицы: 17

Реализовал таким образом. Для коллег с курса)
def separation_whole(number):
««flag = True
««whole = «» #целое
««fraction = «» #дробь
««for symbol in number:
««««if symbol == ‘.’:
««««««flag = False
««««elif flag:
««««««whole = whole + symbol
««««else:
««««««fraction = fraction + symbol
««return int(whole)

def separation_fraction(number):
««flag = True
««whole = «» #целое
««fraction = «» #дробь
««for symbol in number:
««««if symbol == ‘.’:
««««««flag = False
««««elif flag:
««««««whole = whole + symbol
««««else:
««««««fraction = fraction + symbol
««return int(fraction)

def revers(n):
««count = 0
««while n > 0:
««««count = count * 10 + n % 10
««««n //= 10
««return str(count)

def bonding(revers_whole, revers_fraction):
««revers_num = revers_whole + «.» + revers_fraction
««return str(revers_num)

def summ_mun(first_num, second_num):
««summ = float(first_num) + float(second_num)
««return summ

first_number = (input(«Введите первое число: «))
««second_number = (input(«Введите второе число: «))

Дополнение, убираем принты и добавляет эти строки после
first_number = (input(«Введите первое число: «))
second_number = (input(«Введите второе число: «))

revers_first_num = bonding(revers(separation_whole(first_number)), revers(separation_fraction(first_number)))
revers_second_num = bonding(revers(separation_whole(second_number)), revers(separation_fraction(second_number)))

print(f»\nПервое число наоборот: «)
print(f»Второе число наоборот: «)

summ_revers_num = summ_mun(revers_first_num, revers_second_num)
print(f»Сумма: «)

Вот вариант покороче

Вот самый подходящий вариант для товарищей из Skillbox):
def turn_numbers1(N):
number = 0
main_part = round(N, 1) // 1
print(main_part)
while main_part > 0:
rest = main_part % 10
main_part = main_part // 10
number = number * 10
number = number + rest
print(number)
return number

def turn_numbers2(N):
number2 = 0
residual_part = round(N — (N // 1), 2) * 100
print(residual_part)
while residual_part > 0:
rest = (round((N — (N // 1)), 2) * 100) % 10
residual_part = residual_part // 10
number2 = number2 + rest
number2 = number2 * 10 — 0.1
number2 /= 1000
return number2

N1 = float(input(«Введите первое вещественное число: «))

reverse_N1_main = turn_numbers1(N1)
reverse_N1_residual = turn_numbers2(N1)
reverse_N1 = reverse_N1_main + reverse_N1_residual
print(«1ое число наоборот: «, reverse_N1)

N2 = float(input(«Введите второе вещественное число: «))

reverse_N2_main = turn_numbers1(N2)
reverse_N2_residual = turn_numbers2(N2)
reverse_N2 = reverse_N2_main + reverse_N2_residual
print(«2ое число наоборот: «, reverse_N2)

summ_reversed_num = reverse_N1 + reverse_N2
print(«Сумма: «, summ_reversed_num)

Можно сделать все просто)

n_1 = float(input(‘Введите первое число: ‘))
n_2 = float(input(‘Введите второе число: ‘))
print()

def revers_number(number):
«»»Часть которая переворачивает число до точки»»»

x = int(number)
n = 0

while x > 0:
digit = x % 10
x = x // 10
n = n * 10
n = n + digit

«»»Часть которая переворачивает число после точки»»»

y = »
for i in reversed(str(number)):
if i == ‘.’:
break
y += i
y = float(‘0.’ + y)

def converty(x):
x
b = str(int(x))[::-1]
n = len(str(x))
m = len(str(int(x)))
c = str(x)[m+1:n]
d = c[::-1]
x1 = b+’.’+d
return x1

y = float(input(‘y=’))
y1 = converty(y)

z = float(input(‘z=’))
z1 = converty(z)

print(y1, z1, float(y1) + float(z1))

У меня вот так:
def r_num(num):
flag = True
b = »
c = »
for i in num:
if i == ‘.’:
flag = False
elif flag:
b += i
else:
c += i
b, c = int(b), int(c)
return rev_num(b, c)

def rev_num(num_rev1, num_rev2):
rev1 = 0
rev2 = 0
while num_rev1 > 0:
dig = num_rev1 % 10
rev1 = rev1 * 10 + dig
num_rev1 //= 10
while num_rev2 > 0:
dig = num_rev2 % 10
rev2 = rev2 * 10 + dig
num_rev2 //= 10
rev1, rev2 = str(rev1), str(rev2)
sum_all = float(rev1 + ‘.’ + rev2)
return sum_all

number_n1 = (input(‘Введите первое число: ‘))
print(‘Превернутое первое число:’, r_num(number_n1))
number_n2 = (input(‘Введите второе число: ‘))
print(‘Превернутое второе число:’, r_num(number_n2))
print(‘Сумма:’, r_num(number_n1), ‘+’, r_num(number_n2), ‘=’, (r_num(number_n1) + r_num(number_n2)))

def coup(list):
number3 = ''
for i in str(list[::-1]):
number3 += i
return number3

def work_in_parts(number):
list = str(number).split('.')
return float(coup(list=list[0]) + '.' + coup(list=list[1]))

number1 = work_in_parts(number=input('Введите первое число: '))
number2 = work_in_parts(number=input('Введите второе число: '))

print('Первое число наоборот: ', number1)
print('Второе число наоборот: ', number2)
print('Сумма: ', number1 + number2)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *