Me estoy preparando para HP CodeWars 2014 resolviendo problemas de años anteriores, pero me quedé atrapado en este problema, esperando que alguien me ayude.
Aquí está el algoritmo de verificación de dígitos UPC:
- Primero, agregue todos los dígitos en las posiciones impares y multiplique el resultado por tres.
- Luego, agregue los dígitos en las posiciones pares al resultado.
- Luego, encuentra el módulo 10 de la suma. Modulo calcula el resto después de dividir la suma por 10.
- Finalmente, si el resto no es cero, restarlo de 10.
Entrada
La primera línea de entrada contiene el número de UPC que siguen. Los dígitos de cada UPC estarán separados por un espacio.
6 0 1 2 3 4 5 6 7 8 9 0 0 3 6 0 0 0 2 9 1 4 5 0 7 3 8 5 2 0 0 9 3 8 0 7 0 7 3 4 0 5 3 1 6 0 4 1 2 2 0 1 8 9 0 4 0 3 7 0 0 0 2 0 2 1 4
Salida
Para cada UPC, el programa debe imprimir el UPC, incluido el dígito de verificación calculado. Los dígitos de cada UPC deben estar separados por un solo espacio.
0 1 2 3 4 5 6 7 8 9 0 5 0 3 6 0 0 0 2 9 1 4 5 2 0 7 3 8 5 2 0 0 9 3 8 5 0 7 0 7 3 4 0 5 3 1 6 0 0 4 1 2 2 0 1 8 9 0 4 5 0 3 7 0 0 0 2 0 2 1 4 1
Aquí está mi programa pero parece fallar en alguna parte. Por favor, ayúdame a encontrar el error.
n=input()
for i in range(1,n+1):
seq=raw_input()
ar=seq.split(" ")
l=len(ar)
res=0
sume=0
sumo=0
for k in range(0,l):
if k%2==0:
sume+=int(ar[k])
else:
sumo+=int(ar[k])
res=(sumo*3+sume)%10
if res!=0:
res=10-res
print seq,res
Error :
El resultado no es el esperado. Obtengo resultados incorrectos, ¡supongo que hay algún error lógico!
2 respuestas
Su cheque para pares e impares es al revés. Si cambias
if k%2==0:
sume+=int(ar[k])
else:
sumo+=int(ar[k])
Para
if k%2==0:
sumo+=int(ar[k])
else:
sume+=int(ar[k])
Su código genera los valores correctos. Creo que la descripción supone que el primer dígito está numerado "1" en lugar de "0".
n=input()
for i in range(1,n+1):
seq=raw_input()
ar=seq.split(" ")
l=len(ar)
res=0
sume=0
sumo=0
for k in range(0,l):
if k%2==0:
sume+=int(ar[k])
else:
sumo+=int(ar[k])
res=(sumo*3+sume)%10
if res!=0:
res=10-res
print seq,res
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.