--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezue...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezue...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezue...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Eso no es nada phytónico....
--
Juancarlo Añez
Francisco: con mucho respeto: usar itertools no es como demasiado? un simple oper = [0, 3, 2, 7, 6, 5, 4, 3, 2] sin depencencias ni nada me parece más limpio y legible. "Mejor explicito que implícito"
--
Creo que pueden aprovechar para explicar qué es algo explícito y que no lo es :)
# -*- coding: utf-8 -*-
from __future__ import print_function, division, absolute_import, unicode_literalsimport itertools# colocamos las constantes fuera de la funciónFACTOR_TIPO = {'V': 4, 'E': 8, 'J': 12, 'G': 20}FACTOR_DIGITO = [3, 2, 7, 6, 5, 4]# Usamos dos parámetros ya que en muchas aplicaciones la letra# para el tipo de RIF se obtiene con un campo aparte.# En todo caso, es fácil para el cliente hacer codigo[0], codigo[1:]def ultimo_digito_rif(tipo, digitos):tipo = tipo.upper()# no usamos assert para validaciones requeridasif tipo not in FACTOR_TIPO:raise ValueError('%s no es un tipo de RIF válido' % tipo)if not digitos.isdigit():raise ValueError('esperaba una serie de dígitos: %s' % digitos)factores = itertools.cycle(FACTOR_DIGITO)suma = sum([int(d) * f for (d, f) in zip(digitos, factores)])suma += FACTOR_TIPO[tipo]verificacion = 11 - suma % 11return verificacion if verificacion < 10 else 0