Esta cuestión se puede tratar de diversas maneras, sin embargo te dejamos la que para nosotros es la resolución más completa.
Solución:
Ordena los dígitos en orden ascendente y descendente:
ascending = "".join(sorted(str(number)))
descending = "".join(sorted(str(number), reverse=True))
Me gusta esto:
>>> number = 5896
>>> ascending = "".join(sorted(str(number)))
>>>
>>> descending = "".join(sorted(str(number), reverse=True))
>>> ascending
'5689'
>>> descending
'9865'
Y si necesita que vuelvan a ser números (no solo cadenas), llame int()
en ellos:
>>> int(ascending)
5689
>>> int(descending)
9865
2020-01-30
>>> def kaprekar(number):
... diff = None
... while diff != 0:
... ascending = "".join(sorted(str(number)))
... descending = "".join(sorted(str(number), reverse=True))
... print(ascending, descending)
... next_number = int(descending) - int(ascending)
... diff = number - next_number
... number = next_number
...
>>> kaprekar(2777)
2777 7772
4599 9954
3555 5553
1899 9981
0288 8820
2358 8532
1467 7641
>>> x = [4,5,81,5,28958,28] # first list
>>> print sorted(x)
[4, 5, 5, 28, 81, 28958]
>>> x
[4, 5, 81, 5, 28958, 28]
>>> x.sort() # sort the list in place
>>> x
[4, 5, 5, 28, 81, 28958]
>>> x.append(1) # add to the list
>>> x
[4, 5, 5, 28, 81, 28958, 1]
>>> sorted(x)
[1, 4, 5, 5, 28, 81, 28958]
Como muchos otros han señalado, puede ordenar un número hacia adelante como:
>>> int(''.join(sorted(str(2314))))
1234
Esa es más o menos la forma más estándar.
¿Invertir un número? No funciona bien en un número con ceros al final.
>>> y = int(''.join(sorted(str(2314))))
>>> y
1234
>>> int(str(y)[::-1])
4321
los [::-1]
La notación indica que el iterable debe recorrerse en orden inverso.
Como Mark Rushakoff ya mencionó (pero no resolvió) en su respuesta, str(n)
no maneja numérico n
con ceros a la izquierda, que necesita para la operación de Kaprekar. la respuesta de hughdbrown tampoco funciona con ceros a la izquierda.
Una forma de asegurarse de que tiene un texto de cuatro caracteres string es usar el zfill
string método. Por ejemplo:
>>> n = 2
>>> str(n)
'2'
>>> str(n).zfill(4)
'0002'
También debe tener en cuenta que en las versiones de Python anteriores a la 3, un cero inicial en un literal numérico indicaba octal:
>>> str(0043)
'35'
>>> str(0378)
File "", line 1
str(0378)
^
SyntaxError: invalid token
En Python 3, 0043
no es un literal numérico válido en absoluto.
Reseñas y puntuaciones de la guía
Ten en cuenta difundir este escrito si te valió la pena.