livro - python with django pdf




Fazer um loop de trás para frente usando índices em Python? (9)

Eu estou tentando loop de 100 para 0. Como faço isso em Python?

for i in range (100,0) não funciona.


A resposta simples para resolver o seu problema pode ser assim:

for i in range(100):
    k = 100 - i
    print(k)

Curto e grosso. Esta foi a minha solução ao fazer o curso codeAcademy. Imprime uma string em ordem de rotação.

def reverse(text):
    string = ""
    for i in range(len(text)-1,-1,-1):
        string += text[i]
    return string    

Eu tentei isso em um dos exercícios de codeacademy (invertendo chars em uma string sem usar invertido nem :: -1)

def reverse(text):
    chars= []
    l = len(text)
    last = l-1
    for i in range (l):
        chars.append(text[last])
        last-=1

    result= ""   
    for c in chars:
        result += c
    return result
print reverse('hola')

Geralmente em Python, você pode usar índices negativos para começar pela parte de trás:

numbers = [10, 20, 30, 40, 50]
for i in xrange(len(numbers)):
    print numbers[-i - 1]

Resultado:

50
40
30
20
10

Outra solução

z = 10
for x in range (z):
   y = z-x
   print y

Resultado:

10
9
8
7
6
5
4
3
2
1

Dica: Se você estiver usando este método para contar índices de volta em uma lista, você irá querer -1 do valor de 'y', pois os índices de sua lista começarão em 0.


Tente o range(100,-1,-1) , o terceiro argumento é o incremento a ser usado (documentado here ).


for var in range(10,-1,-1) funciona


Por que seu código não funcionou

Você codifica for i in range (100, 0) está bem, exceto

o terceiro parâmetro ( step ) é por padrão o +1 . Então você tem que especificar o 3º parâmetro para o intervalo () como -1 para retroceder.

for i in range(100, -1, -1):
    print(i)

NOTA: Isso inclui 100 e 0 na saída.

Existem várias maneiras.

Melhor maneira

Para o modo pythonic, verifique o PEP 0322 .

Este é o exemplo pythonico do Python3 para imprimir de 100 a 0 (incluindo 100 e 0).

for i in reversed(range(101)):
    print(i)

a = 10
for i in sorted(range(a), reverse=True):
    print i




loops