Estoy aprendiendo a programar y estoy usando "cómo pensar como un informático". La pregunta anterior es un ejercicio. Este es el programa sin una función.

fruit = "banana"

index = 0

while index < len(fruit):

letter = fruit[index]
print(letter)
index = index + 1

Quiero poner eso en una función como

def tranversal(fruit):
    index = 0

    while index < len(fruit):

        letter = fruit[index]
        return letter
        index += 1

        print(tranversal("apple"))

Sin embargo, esto solo está imprimiendo la primera letra de "manzana" y si uso la declaración de impresión en lugar de la devolución, obtendré Ninguno. Estoy muy confundido y necesito ayuda !!

0
Godswill Okafor 5 oct. 2019 a las 14:47

6 respuestas

La mejor respuesta

Parece que no entendiste el propósito de la declaración de devolución dentro de una función. Es posible que desee leer esta respuesta primero para aclarar las cosas.

Una vez que comprenda la diferencia entre print() y return, debe definir qué debe hacer su función. ¿Necesita devolver la respuesta o está imprimiéndola en la pantalla lo suficiente?

Suponiendo lo último, dado que las cadenas son iterables, una forma más pitónica de hacerlo sería:

def transversal(fruit):
    for letter in fruit:
        print(letter)

Tenga en cuenta que dado que la función no devuelve explícitamente un valor si intenta algo como:

foo = transversal("banana")

La variable foo mantendrá el valor None.

Si desea que su función devuelva la respuesta y no la imprima, puede agregar cada letra a una cadena result vacía, con separadores para cada nueva línea y, una vez que haya terminado con eso, simplemente devuelva result . Podría ser un buen ejercicio, así que deberías probarlo :).

1
Vinicius Couto 5 oct. 2019 a las 12:25

Si usa print en la función, no necesita usar print cuando llame a la función.

def tranversal(fruit):

    index = 0

    while index < len(fruit):

        letter = fruit[index]

        print(letter)

        index += 1

tranversal("apple")

Si usa una declaración return dentro del ciclo while, inmediatamente abandonará la función (y devolverá la primera letra), y el ciclo while no se ejecutará para índices más altos.

1
Mykola Zotko 8 oct. 2019 a las 06:48

Con el fin de comprender, quería hacer ese ejercicio con una función, mientras bucle y obtengo un valor de retorno. Recibí ayuda y aprecio a todos, aquí está mi código:

def `tranversal`(fruit):

   result = ""

   length = int(len(fruit))

   index = 0

   while index < length:

        result += fruit[index]

        index += 1

        if index == length:

            return "\n".join(result)

print(tranversal("string"))
0
Godswill Okafor 7 oct. 2019 a las 12:55

Debe ejecutar la declaración utilizando la función fuera de la función. Simplemente cambie return tranversal("apple") fuera de la función transversal así:

def transversal(fruit):
    index = 0
    letters = ''

    while index < len(fruit):

        letters += fruit[index] + '\n'
        index += 1
    return letters

print(transversal("apple"))

Gracias @MykolaZotko por señalar un error en el código que causó que solo imprimiera la primera letra.

-1
Sid 8 oct. 2019 a las 06:43

Una solución simple:

print(*'banana', sep='\n')

Salida:

b
a
n
a
n
a

Con la ayuda del operador estrella * puede dividir una lista o una cadena en partes y pasarlas como argumentos múltiples para que funcionen. Entonces la expresión print(*'abc') es equivalente a print('a', 'b', 'c').

1
Mykola Zotko 8 oct. 2019 a las 06:14

Puedes usar este fragmento de código

def printAllChar(s):
    for i in s:
        print(i,end='\n')


//calling here...
printAllChar("ProgRank")

//output here...

P
r
o
g
R
a
n
k
0
Ankit Bharti 5 oct. 2019 a las 12:39
58247994