2011-03-10 32 views
17

¿Hay alguna forma de obtener el último dígito de un número? Estoy tratando de encontrar las variables que terminan con "1" como 1,11,21,31,41, etc ..Cómo verificar el último dígito del número

Si utilizo una variable de texto puedo simplemente poner

print number[:-1] 

pero funciona . para las variables con texto (como "hola), pero no con los números con los números me sale este error:.

TypeError: 'int' object is not subscriptable 

estoy tratando de ver si hay una mejor manera de lidiar con los números de esta forma que conozco una solución es para convertir a una cadena y luego hacer el comando anterior, pero estoy tratando de ver si hay otra manera que me he perdido.

Muchas gracias de antemano ...

Respuesta

22

resto de la división por 10, como en

numericVariable % 10 

Esto sólo funciona para los números positivos. -12% 10 rendimientos 8

14

Usa el operador de módulo con 10:

num = 11 
if num % 10 == 1: 
    print 'Whee!' 

Esto le da al resto de la división por 10, que siempre será el último dígito (cuando el número es positivo).

+5

Tenga en cuenta que esto no funcionará como se espera para los negativos: ('-3% 10 == 7') – cobbal

+2

@cobbal: Buen punto. En este caso, podría tomar el valor absoluto primero: 'abs (num)% 10' – Cameron

10

Así que desea acceder a los dígitos en un entero como los elementos en una lista; forma más sencilla que puedo pensar es:

n = 56789 
lastdigit = int(repr(n)[-1]) 
# > 9 

Conversor n en una cadena, acceder último elemento a continuación, utilizar int constructor para convertir de nuevo en número entero.

Para un número de coma flotante:

n = 179.123 
fstr = repr(n) 
signif_digits, fract_digits = fstr.split('.') 
# > ['179', '123'] 
signif_lastdigit = int(signif_digits[-1]) 
# > 9 
+5

Me acabo de dar cuenta de que es mucho mejor usar repr (n) en lugar de str (n) ya que con algunos números puede perder precisión . No tengo idea por qué pero acabo de verlo cuando juego con números flotantes. –

0

No puedo agregar un comentario, sin embargo, pero quería repetir y ampliar en lo que Jim Garrison dijo

resto de la división por 10, como en numericVariable% 10

Esto solo funciona para números positivos. -12% 10 yields 8

Mientras que el módulo (%) funciona según lo previsto, arroje un valor absoluto para usar el módulo en esta situación.

abs(numericVariable) % 10 
0

Mediante el uso de la iteración y en función integrada de 'dígito' el número se trata como binario y lo que va de atrás hacia adelante. Aquí hay un ejemplo de un código para usted.

for digit in binary: 
    denary= denary*2 + int(digit) 
Cuestiones relacionadas