loops - for - while en python 3




Contador de bucle Python en un bucle for (3)

En mi código de ejemplo a continuación, ¿realmente se requiere el contador = 0, o hay una manera mejor, más Python, de obtener acceso a un contador de bucles? Vi algunas PEP relacionadas con los contadores de bucles, pero fueron diferidas o rechazadas ( PEP 212 y PEP 281 ).

Este es un ejemplo simplificado de mi problema. En mi aplicación real, esto se hace con gráficos y todo el menú debe ser repintado en cada cuadro. Pero esto lo demuestra en una forma sencilla de texto que es fácil de reproducir.

Quizás también debería agregar que estoy usando Python 2.5, aunque todavía estoy interesado si hay una forma específica para 2.6 o superior.

# Draw all the options, but highlight the selected index
def draw_menu(options, selected_index):
    counter = 0
    for option in options:
        if counter == selected_index:
            print " [*] %s" % option
        else:
            print " [ ] %s" % option
        counter += 1


options = ['Option 0', 'Option 1', 'Option 2', 'Option 3']

draw_menu(option, 2) # Draw menu with "Option2" selected

Cuando se ejecuta, produce:

 [ ] Option 0
 [ ] Option 1
 [*] Option 2
 [ ] Option 3

A veces hago esto:

def draw_menu(options, selected_index):
    for i in range(len(options)):
        if i == selected_index:
            print " [*] %s" % options[i]
        else:
            print " [ ] %s" % options[i]

Aunque tiendo a evitar esto si significa que voy a decir options[i] más de un par de veces.


También podrías hacer:

 for option in options:
      if option == options[selected_index]:
           #print
      else:
           #print

Aunque te encuentras con problemas si hay opciones duplicadas.


Use enumerate() como sigue:

def draw_menu(options, selected_index):
    for counter, option in enumerate(options):
        if counter == selected_index:
            print " [*] %s" % option
        else:
            print " [ ] %s" % option    

options = ['Option 0', 'Option 1', 'Option 2', 'Option 3']
draw_menu(options, 2)

Nota : Opcionalmente puede poner paréntesis alrededor del counter, option , como (counter, option) , si lo desea, pero son extraños y normalmente no están incluidos.





python