my_favourite_fruits = ["apple","orange","pear"]
i = 0
while(True):
  print(my_favourite_fruits[i])
  i = i+1

Este código imprime actualmente los 3 elementos de la lista, luego se bloquea porque no hay más elementos de la lista para imprimir. ¿Cómo consigo que se impriman una y otra vez, utilizando un bucle while?

3
Francisca Rios Durkin 27 feb. 2021 a las 12:34

5 respuestas

La mejor respuesta

Puede probar el módulo %.

Si la longitud de la lista es 5, cuando i llegue a 5, i se restablecerá a 5%5 = 0

my_favourite_fruits = ["apple","orange","pear"]
i = 0
while(True):
    print(my_favourite_fruits[i])
    i = i+1
    i = i%len(my_favourite_fruits)
1
Epsi95 27 feb. 2021 a las 09:36

itertools.cycle en la biblioteca estándar de Python se hizo justo para casos como este:

from itertools import cycle    

my_favourite_fruits = ["apple", "orange", "pear"]
endless_fruits = cycle(my_favourite_fruits)
while(True):
    print(next(endless_fruits))
3
das-g 27 feb. 2021 a las 09:45

No es necesario contar nada manualmente. Tener un número colgando no significa necesariamente nada, así que maneje los datos entrantes sin importar el tamaño e itere con un ciclo anidado.

my_favourite_fruits = ["apple", "orange", "pear"]

while True:
    for fruit in my_favourite_fruits:
        print(fruit)
3
Sam Morgan 27 feb. 2021 a las 10:21

Configure una condición para comenzar de nuevo.

my_favourite_fruits = ["apple","orange","pear"]
i = 0
while(True):
  print(my_favourite_fruits[i])
  i = i+1
  if i == 3:
    i = 0
2
programandoconro 27 feb. 2021 a las 09:37

Utilice el operador de módulo% para limitar el tamaño de i:

my_favourite_fruits = ["apple","orange","pear"]
i = 0
while(True):
  print(my_favourite_fruits[i])
  i = (i + 1) % len(my_favourite_fruits)

O omita el conteo por completo si no lo necesita:

my_favourite_fruits = "\n".join(["apple","orange","pear"])
while(True):
    print(my_favourite_fruits)
2
Allan Wind 27 feb. 2021 a las 09:53