Me pidieron que escribiera una función llamada verano que obtiene una lista y devuelve su suma, pero solo si todos los elementos de la lista son del mismo tipo. Por ejemplo si:

summer(['a','b','c'])

El resultado será:

abc

Si

summer (['True','False','True'])

El resultado será:

2

pero Si

summer (['a','1','k'])

Imprimirá los elementos que no son del mismo tipo.

Aquí está mi código:

def summer(lst):
    summary=0
    for i in range(len(lst)):
        if i==0:
            summary=lst[0]
        else:
            summary+=lst[i]
    return summary
lst=input("Insert list ")
lst=lst.split(',')
print(summer(lst))

Mi código solo une todo:

Si la entrada es True, False la impresión es TrueFalse

Por favor ayudame a arreglarlo, gracias!

0
Daniel.Agranat 7 oct. 2019 a las 22:00

3 respuestas

La mejor respuesta

Lo primero que tendrá que hacer es verificar el tipo de cada elemento.

Entonces, sobre su condición if/else dentro del ciclo for, considere verificar si todos los elementos son del mismo tipo. Algo como:

for item in lst:
    if (type(item) != lst[0]):
         break;

Si entendí correctamente su problema, solo si no hay diferencia entre todos los elementos, se debe realizar la operación deseada.

Espero que pueda aclararme.

0
lucascavalcante 7 oct. 2019 a las 19:07
def summer(items):
    from functools import reduce
    from operator import add
    assert isinstance(items, list)

    types = {type(item) for item in items}
    if len(types) != 1:
        raise TypeError("All items must have the same type!")
    return reduce(add, items)

Salida:

>>> summer(["a", "b", "c"])
'abc'
>>> summer([1, 2, 3])
6
>>> summer([True, False, True])
2
>>> summer([True, False, "A"])
TypeError: All items must have the same type!
0
user10987432 7 oct. 2019 a las 19:21

Creo que esto podría ser lo que intentas hacer o algo cercano.

def summer(lst):
    summary=0
    if all(isinstance(i,int) for i in lst):
        return sum(lst)
    if all(isinstance(i,str) for i in lst):
        return ''.join(lst)
    else:
        return 'Elements not the same'
summer([True,False,True])
0
Jeff R 7 oct. 2019 a las 19:11
58275621