Listas y Funciones. 17


#1




¿Cuál es el error? Ya que si bien el ejercicio me dice que está bien, me salta este error en consola:
Traceback (most recent call last):
File "python", line 8, in
File "python", line 4, in myFun
TypeError: unsupported operand type(s) for +: 'int' and 'str'


n = ["Michael","Lieberman"]
def myFun(x):
    for i in range(0,len(x)):
        return sum(x[i])
        
    

print myFun(n)


#2

Como indica el error, los tipos de datos int y string no se pueden sumar.
La función myFun admite listas pero de números, puesto que en el return utilizas una función sum(), que sólo admite números.
Para unir (concatenar) strings debes utilizar la función " ".join(list).
Este método toma una lista de strings y los une entre sí con el elemento string que utilizaste en la llamada entre medio de ellos. Por eso suele colocarse " ".join para indicar un espacio entre cada palabra.

n = ["Michael","Lieberman", "bla", "ble"]
" ".join(n)
///Consola: Michael Lieberman bla ble

#3

Hola root4af.
Tengo un problema similar al de gabriel, solo que en mi caso sí es una lista con numeros, pero no logro obtener la suma de dichos números. Obtengo el siguiente error:
Traceback (most recent call last):
File “python”, line 10, in
File “python”, line 7, in myFun
TypeError: ‘int’ object is not iterable

n = [3,5,7]

def myFun(x):
<iteracion) for i in range(0,len(x)):
<2da iteracion) return sum(n[i])

print myFun(n)

Espero puedas ayudarme, te lo agradecería demasiado.


#4

Hola! No tengo certeza de qué ejercicio quieres hacer, si está en la guía me indicas cuál es?

El primer error que veo en tu código es que al definir el comportamiento de la función myFun(x) estás utilizando la lista n antes de tiempo. No sé si fue un error de tipeo o de concepto, así que saltea este comentario si ya lo tienes en claro.
Piensa que cuando defines una función, siempre utilizas variables “comodines” que aún no tienen un valor asignado. En nuestra función, x aún no significa nada. Puede ser una lista de enteros o una lista de decimales… pero en fin, un número.
Si te sirve, también podrías escribir el código en este orden y quizás quede más claro que la variable n aún no debe ser utilizada.

def myFun(x):
    for i in range(0,len(x)):
        return sum(x[i])

n = [3,5,7]
print myFun(n)

Pasando este problema… nos queda el tema de por qué elegiste que la función se comporte de esta manera.
¿Qué hace exactamente el ciclo for en cada vuelta? ¿Estás seguro que sum(x[i]) va a sumar todos los números de la lista y los sumará como tú deseas? ¿Qué hace sum() realmente?


#5

Hola root4af.
Agradezco tu correción en mi código,y utilizé la forma que me sugeriste aunque seguí recibiendo el error de:
Traceback (most recent call last):
File “python”, line 8, in
File “python”, line 6, in myFun
TypeError: ‘int’ object is not iterable

Pero gracias a tus preguntas sobre lo que estaba tratando de hacer con sum(x[i]) y que es lo que hace sum() realmente. Encontré la solución o al menos me devolvío el valor que estaba buscando y así fue como quedó:

n = [3,5,7]
def myFun(x):
    for i in range(0,len(x)):
        return sum(x)

print myFun(n)

De una forma sigo con la duda sobre el comportamiento de sum(x[i]) si es que debería sumar cada uno de los elementos de la lista de la siguiente forma:
n = [3,5,7]
sum(x[i]) = n[0] + n[1] + n[2]
Por que sum( ) se comportó exactamente como quisé aún sin haberle especificado los elementos de la lista.


#6

Este es el quid de la cuestión! :slight_smile:
En Phyton, la función sum está preparada para iterar una lista de números y sumar sus componentes. Se representa así:
sum(lista, comienzo)
siendo lista un iterable (normalmente de números) y comienzo por default vale cero (no admite Strings).

Esto quiere decir que al invocar esta función, Phyton ya sabe que sumará todos los componentes de tu lista, y si estuviera especificado, el valor de la variable comienzo.

Fíjate estos ejemplos:


a = [1,2,3,4]
print (sum(a))

>>10

a = [1,2,3,4]
print (sum(a,5))

>>15


#7

Muchísimas gracias root4af :upside_down_face:
Por toda la ayuda y explicaciones que me has dado y esta pequeña lección que me has dado sobre sum( ), la tomaré siempre en cuenta de ahora en adelante en cada función que cree.

Saludos. :wave: