for i in range(0,10,-1):
     print (i)

Por qué el programa anterior no imprime nada, espero que imprima al menos 0 De acuerdo con la definición "para i en rango (inicio, final, iterador)", evalúa el primer elemento y luego usa el iterador para llegar al siguiente elemento. Entonces, en teoría, el fragmento de código de ejemplo primero debe tomar 0 e imprimirlo y luego el siguiente elemento se evalúa como -1, que no está en 0-10, luego debe rescatar

0
prap4search 12 ene. 2017 a las 01:48

4 respuestas

La mejor respuesta

Con un "step" negativo, python sigue produciendo elementos 1 mientras el valor actual es mayor que end. En este caso, comienza en 0. 0 no es mayor o igual que 10, por lo que Python está hecho y no se obtiene nada.


1 Esto es una simplificación, por supuesto: range devuelve un objeto range en python3.x que es un tipo de secuencia indexable, por lo que no es exactamente yield , pero la idea básica es la misma ...

2
mgilson 11 ene. 2017 a las 22:55

La llamada range() no evalúa el primer elemento, y la función range() de Python no devolverá nada si step es negativo y start + i * step no es mayor que {{X4 }}. Para su ejemplo, start = 0 + 0 * -1 no es mayor que stop = 10, por lo que su llamada range devuelve la lista vacía, y su bucle for no tiene nada para repetir.

$ python -c 'print(range(0,10,-1))'
[]

documentación de range()

rango (parada)

rango (inicio, parada [, paso])

Esta es una función versátil para crear listas que contienen progresiones aritméticas. Se usa con mayor frecuencia en bucles. Los argumentos deben ser enteros simples. Si se omite el argumento de paso, su valor predeterminado es 1. Si se omite el argumento de inicio, su valor predeterminado es 0. El formulario completo devuelve una lista de enteros simples [inicio, inicio + paso, inicio + 2 * paso, ...] . Si step es positivo, el último elemento es el inicio más grande + i * step menos que stop; si el paso es negativo, el último elemento es el inicio más pequeño + i * paso mayor que el de detención. el paso no debe ser cero (o se generará ValueError). Ejemplo:

2
mtd 11 ene. 2017 a las 22:57

El tercer argumento en range es step

En el rango puede dar step como 1, 2 etc.

Cuando le das -1, no hará paso en reverse.

Si desea imprimir en orden inverso puede intentar

>>> range(10)[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
0
Nilesh 11 ene. 2017 a las 22:55

En Python, la función de rango funciona con los argumentos range(StartingValue, EndingValue, Step). El problema que tiene es que está asignando un paso negativo a una situación en la que el Valor Inicial es menor que el Valor Final. Como este es el caso, nunca ingresa al bucle, porque el valor final ya se alcanzó y se superó.

Para solucionar esto, solo invierta los dos primeros valores: for I in range(10,0,-1). Piense en ello como si lo estuviera diciendo en una oración, como FOR each ITEM in the RANGE of 10 to 0 decreasing by 1

0
sonrad10 11 ene. 2017 a las 23:25