Python - Programa para verificar la letra del DNI

   
Vista:
Imágen de perfil de Xamiend

Programa para verificar la letra del DNI

Publicado por Xamiend (18 intervenciones) el 05/07/2014 15:28:18
Buenas, estaba haciendo un programa para introducir los números de tu DNI y que te devolviera la correspondiente letra. El programa lo tengo, pero quería hacerlo con una función para poder repetirlo sin tener que reescribir todo el código. Tengo algo tal que así:

1
2
3
4
5
6
7
8
9
10
def ra():
    numero = input("Introduzca únicamente los números de su DNI ")
    intnumero = int(numero)
    diccionario = {0:"T",1:"R",2:"W",3:"A",4:"G",5:"M",6:"Y",7:"F",8:"P",9:"D",10:"X",
               11:"B",12:"N",13:"J",14:"Z",15:"S",16:"Q",17:"V",18:"H",19:"L",
               20:"C",21:"K",22:"E"}
    resto = intnumero%23
    letra = diccionario[resto]
 
    print("Su letra del DNi es", letra,  "Y su número completo,", numero, letra)


pero al ejecutarlo me sale el siguiente mensaje de error:

>>> ra()
Introduzca únicamente los números de su DNI 08976586

Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
ra()
File "<pyshell#5>", line 2, in ra
numero = input("Introduzca únicamente los números de su DNI ")
File "<string>", line 1
08976586
^
SyntaxError: invalid token


¿Cuál es el problema? Debo aclarar que llevo pocos días de serio con python y todavía no sé ni truquitos ni formas para hacer la sintaxis más sencilla ni nada de eso, cualquier clase de ayuda o crítica constructiva me vendría bien :)
Un saludo y muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Programa para verificar la letra del DNI

Publicado por xve (1232 intervenciones) el 05/07/2014 18:20:56
Hola Xamiend, en vez de utilizar input() utiliza raw_input()... te funcionara a la perfección... algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- coding: utf-8 -*-
 
def ra():
    numero = raw_input("Introduzca únicamente los números de su DNI ")
    intnumero = int(numero)
    diccionario = {0:"T",1:"R",2:"W",3:"A",4:"G",5:"M",6:"Y",7:"F",8:"P",9:"D",10:"X",
               11:"B",12:"N",13:"J",14:"Z",15:"S",16:"Q",17:"V",18:"H",19:"L",
               20:"C",21:"K",22:"E"}
    resto = intnumero%23
    letra = diccionario[resto]
 
    print("Su letra del DNi es", letra,  "Y su número completo,", numero, letra)
 
ra()

No se exactamente porque, yo nunca utilizo input()...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Xamiend

Programa para verificar la letra del DNI

Publicado por Xamiend (18 intervenciones) el 06/07/2014 00:50:42
Efectivamente, me funciona en python 2.7
Menos mal que tengo instalados sendos; 2.7 y 3.4 :_)
muchas gracias por tu ayuda, me ha servido mucho!
Un saludo, y suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Programa para verificar la letra del DNI

Publicado por bartolo (1 intervención) el 12/07/2014 01:44:21
pues yo, que estoy empezando en python, he cogido de aquí y allí y he conseguido que me funcione ésta función:

1
2
3
4
def letranif(dni):
    NIF='TRWAGMYFPDXBNJZSQVHLCKE'
    letranif=NIF[dni%23]
    return letranif

así después escribimos:

print letranif(12345678)

y nos sale la letra del nif..

lo que yo me pregunto, por que aun no tengo suficientes conocimientos es:

¿ qué es lo que hace en esta función esto: "NIF[dni%23]" ? (me tiene intrigado)

otra pregunta: cómo podría hacer esta función en tipo lambda?
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Programa para verificar la letra del DNI

Publicado por xve (1232 intervenciones) el 12/07/2014 20:33:06
Hola Bartolo, muy bueno el código, de verdad!!!

dni%23, lo que hace es que divide el valor del dni entre 23 y devuelve el resto de la división.
Luego, devuelve la letra de la cadena NIF... eso si, tienes que ser un valor entero, no puede ser una cadena.

cadena[0] devuelve el primer valor, [1] devuelve el segundo, etc...

En una función lambda seria así:
1
2
3
letranif=lambda dni:'TRWAGMYFPDXBNJZSQVHLCKE'[dni%23]
 
print letranif(12345678)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Xamiend

Programa para verificar la letra del DNI

Publicado por Xamiend (18 intervenciones) el 13/07/2014 18:36:26
Me surge la siguiente duda: ¿Qué es y qué sintaxis utiliza una función de tipo lambda?

Por cierto, al introducir un número de DNI que empiece por 0, aparece un mensaje de error. ¿Cómo podría solucionarse?
En mi código lo solucionaba declarando la variable intnumero que convertía a entero el valor del número introducido, pero no sabría cómo hacerlo en ese código.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar