La tarea es verificar si los últimos 3 dígitos de los elementos correspondientes de dos listas son iguales. Si los artículos tienen una longitud inferior a 3, verifica si son del mismo número.

Si las dos listas tienen longitudes diferentes, debería devolver falso, y si ambas listas tienen una longitud de 0, debería devolver verdadero.

def corresponding_elements_have_same_end(list1, list2):

if len(list1) == len(list2):

    for i in range(0, len(list1)):

        num1 = str(list1[i])
        num2 = str(list2[i])

        if len(num1) <= 3 and len(num2) <= 3:
            return num1 == num2

        else:
            return num1[-3:] == num2[-3:]

else:
    return False

Si lo ejecuto a través de esto:

print("1.", corresponding_elements_have_same_end([3452, 43600, 10], [3111452, 600, 10]))
print("2.", corresponding_elements_have_same_end([452, 43600], [52, 600]))
print("3.", corresponding_elements_have_same_end([32, 43032], [32, 32]))
print("4.", corresponding_elements_have_same_end([32, 43132, 300], [32, 56132, 3300]))

Se imprime

  1. Verdadero
  2. falso
  3. Verdadero
  4. Verdadero

Cuándo debería imprimir:

  1. Verdadero
  2. falso
  3. falso
  4. Verdadero
0
John Smith 10 may. 2016 a las 04:45

3 respuestas

La mejor respuesta

El problema es que la función siempre verifica solo un elemento de las listas y regresa inmediatamente sin importar la longitud. Cuando [32, 43032], [32, 32] se comparan entre sí, comprueba que 32 == 32 e inmediatamente devuelve True. Si cambia el orden de la primera lista a [42032, 32], obtendrá False en su lugar.

Para solucionar el problema, el bucle debe modificarse para que solo regrese en caso de que los números no coincidan. Si lo hacen, entonces el siguiente par de números debe ser verificado. Si el ciclo se completa, entonces sabes que todos los números coinciden. Aquí hay un ejemplo:

for i in range(0, len(list1)):
    if str(list1[i])[-3:] != str(list2[i])[-3:]:
        return False

return True

Tenga en cuenta que puede implementar el bucle con zip para hacer indexación innecesaria:

for x, y in zip(list1, list2):
    if str(x)[-3:] != str(y)[-3:]:
        return False
2
niemmi 10 may. 2016 a las 02:04

Quizás este es el flujo de control que está buscando:

def corresponding_elements_have_same_end(list1, list2):
    if len(list1) == len(list2):
        for i in range(len(list1)):
            num1, num2 = str(list1[i]), str(list2[i])
            if len(num1) <= 3 and len(num2) <= 3 and num1 != num2:
                return False
            if num1[-3:] != num2[-3:]:
                return False
        return True
    else:
        return False
0
K. Menyah 10 may. 2016 a las 02:13
def t(m,n):
    if False in map(lambda x,y:str(x)[-3:]==str(y)[-3:],m,n):
        return False
    return True
1
bian 10 may. 2016 a las 02:28