Estoy tratando de tomar cada dos letras de una cadena, pero tengo algún problema con la impresión y el retorno. ¿Por qué cuando uso print, la salida es lo que quiero y cuando uso return solo obtengo la primera letra?

string_bits(Hello)  # Return string made of every other char starting with the first

def string_bits(str):
    x = len(str)
    for i in range(0,x,2):
        print str[i]

output: H
        l
        o

Vs

def string_bits(str):
    x = len(str)
    for i in range(0,x,2):
        return str[i]

output: H
-1
Asso 2 mar. 2018 a las 15:11

4 respuestas

La mejor respuesta

Como todos han señalado, su función devuelve la instancia en el primer bucle. Puede usar una variable temporal para almacenar su resultado y devolver ese resultado.

Puede usar la siguiente declaración dentro de una función:

return ''.join([ur_string[i] for i in range(0, len(ur_string), 2)])
1
bofredo 2 mar. 2018 a las 12:35

Esto se debe a que cuando return, el programa sale de la función, mientras que usando print el programa continúa el ciclo.

Como las cadenas son iterables, puede usar la división para obtener los caracteres que desea especificando el paso como 2:

Para devolver una cadena:

def string_bits(s):
    return s[::2]

Para devolver una lista de caracteres:

def string_bits(s):    
    return list(s[::2])

Alternativamente, puede usar yield para crear un generador:

def string_bits(s):
    for char in s[::2]:
        yield char
0
Trelzevir 2 mar. 2018 a las 12:50

Quizás lo que quieres es esto:

def string_bits(the_str):
    x = len(the_str)
    for i in range(0,x,2):
        yield the_str[i]

O the_str[::2] toma solo el carácter de posición even

1
enneppi 2 mar. 2018 a las 12:21

Función 1

Aquí, recorre toda la cadena e imprime cada letra. El bucle termina cuando no hay más letras y la función sale.

def string_bits(str):
    x = len(str)
    for i in range(0,x,2):
        print str[i]

Función 2

def string_bits(str):
    x = len(str)
    for i in range(0,x,2):
        return str[i]

Aquí, recorre toda la cadena, pero en lugar de imprimir str[i] la devuelve. return hace que su función salga, por lo que el ciclo no continúa con las otras letras.

¡Espero que esto ayude!

0
Colin Ricardo 2 mar. 2018 a las 12:20