Перейти к содержимому

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

  • автор:

Перевернуть список

Потому что метод reverse переворачивает список, но ничего не возвращает.

>>> a = [1, 2, 3] >>> a [1, 2, 3] >>> a.reverse() >>> a [3, 2, 1] 

если вы хотите чтобы функция возвращал перевернутый список не изменяя его — используйте функцию reversed (будьте внимательны, функция вернет итератор!)

>>> a = [1, 2, 3] >>> list(reversed(a)) [3, 2, 1] >>> a [1, 2, 3] 

Отслеживать
ответ дан 21 фев 2014 в 8:35
4,676 16 16 серебряных знаков 15 15 бронзовых знаков

Можно копировать список целиком :: и итерировать в обратном порядке — к пр. так:

for i in a[::-1]: print i,"\n" 

У print неявная конкатенация строк через запятую — туда можно и \n\n впихать, на версии 3 должно быть также.

В принципе, лучший ответ уже был дан — метод reversed (в противовес reverse()):

for i in reversed(a): print i 

Также, если я такой уж многословный, возможно вам нужна разновидность списка (stack — first in last out):

a = [66.25] a.append(333) a.append(333) a.pop() 333 a.pop() 333 a.pop() 66.25 

Перевернуть число

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

Решение задачи на языке программирования Python

Алгоритм:

  1. Найдем остаток от деления на 10 исходного (первого) числа. Тем самым получим последнюю его цифру. Запомним ее.
  2. Присвоим эту цифру новому (второму) числу-«перевертышу».
  3. Разделим нацело на 10 первое число. Тем самым избавимся от последней цифры в нем.
  4. Снова найдем остаток от деления на 10 того, что осталось от первого числа. Запомним цифру-остаток.
  5. Разделим нацело на 10 первое число. Избавимся от текущей последней цифры в нем.
  6. Умножим на 10 второе число. Тем самым увеличим его разрядность до двух и сдвинем первую цифру в более старший разряд.
  7. Добавим к полученному второму числу запомненную ранее цифру из первого числа.
  8. Будем повторять действия п. 4-7 пока первое число не уменьшится до нуля, т. е. пока не избавимся от всех его разрядов.
n1 = int(input("Введите целое число: ")) # Последнюю цифру первого числа переносим во второе digit = n1 % 10 n2 = digit # Избавляемся от последней цифры первого числа n1 = n1 // 10 while n1 > 0: # находим остаток - последнюю цифру digit = n1 % 10 # делим нацело - удаляем последнюю цифру n1 = n1 // 10 # увеличиваем разрядность второго числа n2 = n2 * 10 # добавляем очередную цифру n2 = n2 + digit print('"Обратное" ему число:', n2)

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

Введите целое число: 32809 "Обратное" ему число: 90823
Введите целое число: 78290 "Обратное" ему число: 9287

На самом деле мы можем не добавлять последнюю цифру первого числа во второе до цикла. Если присвоить n2 ноль, то в цикле при выполнении выражения n2 = n2 * 10 не будет происходить сдвига разряда, так как при умножении на 0 получается 0. И первая цифра будет добавляться в разряд единиц.

n1 = int(input("Введите целое число: ")) n2 = 0 while n1 > 0: digit = n1 % 10 n1 = n1 // 10 n2 = n2 * 10 n2 = n2 + digit print('"Обратное" ему число:', n2)

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

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

n1 = input("Введите целое число: ") n_list = list(n1) n_list.reverse() n2 = "".join(n_list) print('"Обратное" ему число:', n2)

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

n1 = input("Введите целое число: ") n2 = n1[::-1] print('"Обратное" ему число:', n2)

Два последних варианта решения задачи — это способы переворота строки, а не числа как такового. Если объект, который надо переверуть, изначально имеет числовой тип данных (например, генерируется функцией randint() ), то его придется преобразовывать в строковый тип данных с помощью функции str() . И если на выходе мы должны получить опять же число, то надо будет строку превращать обратно в число с помощью функции int() .

from random import randint print("Исходное число:", end=' ') n1 = randint(5000, 1000000) print(n1) n1 = str(n1) n2 = n1[::-1] n2 = int(n2) print('"Обратное" ему число:', n2) 
Исходное число: 970334 "Обратное" ему число: 433079

X Скрыть Наверх

Решение задач на Python

Есть ли какая нибудь формула для переворачивания числа задом-наперёд?

т.е. 123 -> 321
Скорее всего нет, но мало ли.
ЗЫ. Решения на языках программирования не предлагать. Я тоже так могу, это легко и не интересно.

sudopacman ★★★★★
04.02.16 22:37:49 MSK
1 2 →

Какие операции ты хочешь использовать?

Легко реализовать, используя floor.

tyakos ★★★
( 04.02.16 22:44:31 MSK )
Последнее исправление: tyakos 04.02.16 22:48:07 MSK (всего исправлений: 1)

А в какое число эта формула должна превращать 10, например? Обратимой такая формула (функция?) в общем случае не может быть, полагаю.

sevenredlines ★
( 04.02.16 22:45:05 MSK )
Ответ на: комментарий от sevenredlines 04.02.16 22:45:05 MSK

Для чисел с 1 и более нулём в конце или начале значение должно быть не определено. А то фиг пойми что получится.

sudopacman ★★★★★
( 04.02.16 22:49:33 MSK ) автор топика

алгоритм есть, формулы — хз

Deleted
( 04.02.16 22:50:10 MSK )

В математике такой формулы нет вроде.

gssomi ★★
( 04.02.16 22:50:20 MSK )

Есть ли какая нибудь формула для переворачивания числа задом-наперёд?

но ведь число перевернуть можно?? вы-же переворачиваете..Значит есть «формула»/алгоритм (что вообще-то одно и то-же).. если хотите можно записать в виде ряда. Можно по другому.

MKuznetsov ★★★★★
( 04.02.16 22:58:21 MSK )

Нету выражения для определения разрядности, значит нету и формулы никакой. Если мы ограничеваемся арифметическими операциями.

Zaskar
( 04.02.16 22:58:22 MSK )
Ответ на: комментарий от Deleted 04.02.16 22:50:10 MSK

Та алгоритм это легко.

sudopacman ★★★★★
( 04.02.16 22:59:32 MSK ) автор топика
Ответ на: комментарий от Zaskar 04.02.16 22:58:22 MSK

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

sudopacman ★★★★★
( 04.02.16 23:00:47 MSK ) автор топика

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

tyakos ★★★
( 04.02.16 23:01:11 MSK )

Сначала определись с тем, какие функции и операции должны быть допустимы в такой «формуле». Потом, скорее всего, получишь ответ исходя из свойств этих функций.

А то, понимаешь ли, я могу сказать, что есть функция swap(x) , заданная бесконечной таблицей.

intelfx ★★★★★
( 04.02.16 23:03:04 MSK )
Ответ на: комментарий от sudopacman 04.02.16 23:00:47 MSK

То, что ты написал в ОП, определяет функцию, т.е. твой вопрос бессмысленен.

tyakos ★★★
( 04.02.16 23:03:49 MSK )
Ответ на: комментарий от tyakos 04.02.16 23:01:11 MSK

Во. Лорчую. Ты сформулировал.

intelfx ★★★★★
( 04.02.16 23:03:55 MSK )

MS EULA 3.0

public static BigInteger reverseIt(BigInteger in) return new BigInteger(new StringBuilder(in.abs().toString()).reverse().toString()).multiply(BigInteger.valueOf(in.signum()));
>

telepat
( 04.02.16 23:04:53 MSK )
Ответ на: MS EULA 3.0 от telepat 04.02.16 23:04:53 MSK

А на языке математики как?

sudopacman ★★★★★
( 04.02.16 23:06:53 MSK ) автор топика
snprintf(buff, «%d», num); len = strlen(buff); if(len>1)

alman ★★★
( 04.02.16 23:12:42 MSK )
Последнее исправление: alman 04.02.16 23:13:51 MSK (всего исправлений: 1)

Пыхоответ на основной вопрос жизни, вселенной и вообще:

echo ((int) strrev(24));

(каст по желанию можешь убрать и не будет убивать «ведущий» ноль)
deep-purple ★★★★★
( 04.02.16 23:12:47 MSK )
Ответ на: комментарий от alman 04.02.16 23:12:42 MSK

Защем впустую стрлен гонял? Сразу буфф гнал бы до \0 и все.

deep-purple ★★★★★
( 04.02.16 23:14:19 MSK )
Ответ на: комментарий от deep-purple 04.02.16 23:14:19 MSK

Точно. Просто сильно спешил.

Хотя. не факт. Но мне лениво думать сейчас.

И ещё нужно добавить размер буфера, ибо snprintf, а не sprintf

alman ★★★
( 04.02.16 23:16:38 MSK )
Последнее исправление: alman 04.02.16 23:20:28 MSK (всего исправлений: 2)

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

(define (swap n) (if (< (abs n) 10) n (+ (* (remainder n 10) (expt 10 (floor (log10 (abs n))))) (swap (quotient n 10))))) 

Соответственно, эту функцию можно описать как:

f(n) = n; |n| < 10, f(n) = (n%10)*(10^floor(log10(|n|))) + f(n/10) 

при условии, что у нас % - остаток от целочисленного деления, floor - отбрасывает дробную часть, log10 - десятичный логарифм и / - целочисленное деление.

Возможно, можно и для вещественных обобщить, лень думать сейчас.

unikoid ★★★
( 04.02.16 23:21:07 MSK )
Последнее исправление: unikoid 04.02.16 23:26:12 MSK (всего исправлений: 1)

#include int main() < int n, reverse = 0; printf("Enter a number to reverse\n"); scanf("%d", &n); while (n != 0) < reverse = reverse * 10; reverse = reverse + n%10; n = n/10; >printf("Reverse of entered number is = %d\n", reverse); return 0; > 

int13h ★★★★★
( 04.02.16 23:25:08 MSK )
Последнее исправление: int13h 04.02.16 23:26:56 MSK (всего исправлений: 1)

Ответ на: комментарий от int13h 04.02.16 23:25:08 MSK

Лучшее решение. Для процессоров, имеющих инструкции умножения и деления. Но и вообще - просто получилось.

alman ★★★
( 04.02.16 23:31:39 MSK )
Последнее исправление: alman 04.02.16 23:33:35 MSK (всего исправлений: 1)

Ответ на: комментарий от Zaskar 04.02.16 22:58:22 MSK

Если у нас есть функция округления, то легко выразить математически количество разрядов - надо просто округлить в верхнюю сторону десятичный логарифм числа (для других систем счисления - другое основание логарифма).

Если функции округления нет. В математике вроде как есть оператор взятия дробной части числа (я видел на одном из уроков математике в школе в старших классах такой финт). Используя его и простую арифметику можно выразить функцию округления.

Данная функция будет определена для любого натурального числа. Если брать число по модулю - для любого целого кроме 0. Ноль придётся рассматривать как отдельный случай. В математике допускается, чтобы функция была задана разными формулами на разных участках. Например, так определяют модуль - на интервале от минус бесконечности до нуля, он равен минус числу, на интервале от нуля до плюс бесконечности - числу.

KivApple ★★★★★
( 04.02.16 23:50:58 MSK )
Последнее исправление: KivApple 05.02.16 00:00:57 MSK (всего исправлений: 2)

Три элегантных способа перевернуть строку в Python

Строки в Python — упорядоченная последовательность символов. В Python нет встроенных методов, позволяющих перевернуть строку, «отзеркалить» ее. Но вообще это сделать можно, причем несколькими способами.

Строка Python в перевернутом виде выглядит как nohtyP.

Существует три способа перевернуть строку.

1. Срезы

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

Делается это так:

stringname[stringlength::-1] # метод 1

Длиной строки можно и пренебречь:

stringname[::-1] # метод 2

В этом случае подразумевается, что первый аргумент — длина строки. Заканчивается он на индексе 0, а шаг — -1 (то есть, шаг назад).

str="pythonist" # исходная строка stringlength=len(str) # вычисление длины строки slicedString=str[stringlength::-1] # срез print (slicedString) # вывод в консоль перевернутой строки
tsinohtyp

2. Цикл

Мы можем перевернуть строку и в цикле.

Для начала создадим массив (список) reversedString[] .

После этого мы можем запустить цикл, где итерируемой переменной будет index — длина списка.

На каждой итерации цикла в reversedString добавляется символ из строки с индексом [index-1] . После этого index уменьшается на 1.

Цикл продолжается до тех пор, пока переменная index не станет равна 0.

str = "pythonist" # исходная строка reversedString=[] index = len(str) # вычисляем длину строки и сохраняем ее в переменной index while index > 0: reversedString += str[ index - 1 ] # сохраняем значение str[index-1] в reverseString index = index - 1 # уменьшаем значение index на 1 print(reversedString) # перевернутая строка
['t', 's', 'i', 'n', 'o', 'h', 't', 'y', 'p']

3. Метод join()

Это мощный метод, использующий протокол итератора Python. Этот способ работает следующим образом. Строка поворачивается путем обратной итерации при помощи метода reversed(). После этого происходит объединение символов в новую строку при помощи метода join().

Синтаксис выглядит так:

str="pythonist" reversedstring=''.join(reversed(str))
str = 'pythonist' # исходная строка reversed=''.join(reversed(str)) # метод .join() объединяет все символы, полученные в результате обратной итерации, в новую строку print(reversed) # вывод перевернутой строки

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

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