Tenía un rato libre, así que he reformulado el algoritmo usando la información que hay en Wikipedia. Espero no te moleste
rut = reversed(map(int,raw_input('RUT ::>')))
m = [2,3,4,5,6,7]
d = sum([n*m[i%6] for i,n in enumerate(rut)])
d %= 11
if (d==1):
d = 'K'
else:
d = 11-d
print d
Y la versión reducida: (Me encanta reducir código Python
)
d=sum([int(n)*(i%6+2)for i,n in enumerate(raw_input()[::-1])])%11
print'K'if(d==1)else 11-d
Para nada ! es genial saber que usas Python y tienes buen nivel !
El primer código que has usado es también posible reducirlo :
# -*- coding: utf-8 -*-
rut = reversed(map(int,raw_input('RUT ::>')))
d = sum([n*range(2,8)[i%6] for i,n in enumerate(rut)])
d %= 11
if (d==1):
d = 'K'
else:
d = 11-d
print d
Pero sin duda el segundo está genial !
EDIT:
Ahora en QT4 para matar el tiempo
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys
class ventana_alerta(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.resize(283, 31)
self.setWindowTitle("ALERTA!")
def message(self, txt):
self.txt = txt
self.respuesta = QtGui.QLabel(self.txt, self)
self.respuesta.setGeometry(10, 10, 260, 17)
class formulario_rut(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setWindowTitle("Digito verificador")
self.resize(279, 36)
self.label_rut = QtGui.QLabel("RUT", self)
self.label_rut.setGeometry(0, 11, 59, 17)
self.rut = QtGui.QLineEdit(self)
self.rut.setGeometry(30, 7, 101, 23)
self.label_verificador = QtGui.QLabel("-", self)
self.label_verificador.setGeometry(135, 11, 16, 17)
self.digito = QtGui.QLineEdit(self)
self.digito.setGeometry(147, 7, 21, 23)
self.digito.setReadOnly(True)
self.verificar = QtGui.QPushButton("Verificar", self)
self.verificar.setGeometry(180, 7, 92, 23)
self.connect(self.verificar, QtCore.SIGNAL("clicked()"), self.operacion)
def operacion(self):
self.rut_valor = str(self.rut.text())
if len(self.rut_valor) < 8 and len(self.rut_valor) > 9:
creacion_alerta.message("Ingresa un rut valido por favor")
creacion_alerta.show()
else:
rut = []
ingresar = [rut.append(numeros) for numeros in self.rut_valor]
rut.reverse()
recorrido = 2
multiplicar = 0
for x in rut:
multiplicar+=int(x)*recorrido
if recorrido==7: recorrido = 1
recorrido+=1
modulo = multiplicar%11
resultado = 11-modulo
if resultado == 11: digito=0
elif resultado == 10: digito="K"
else: digito=resultado
self.digito.setText(str(digito))
run = QtGui.QApplication(sys.argv)
creacion_alerta = ventana_alerta()
creacion_formulario = formulario_rut()
creacion_formulario.show()
run.exec_()