¿Cómo determino si un entero dado está entre otros dos enteros (por ejemplo, mayor que / igual a 10000
y menor que / igual a 30000
)?
Estoy usando 2.3 IDLE y lo que he intentado hasta ahora no funciona:
if number >= 10000 and number >= 30000:
print ("you have to pay 5% taxes")
Respuestas:
fuente
if number in range(10000, 30001)
lo sugerido por otra solución? Además, ¿es más rápido o más lento cuando se usa enset
lugar derange
?number
se compara primero con10000
. Si es menor que10000
la expresión se cortocircuita inmediatamente y no se verifica la segunda comparación. La complejidad esO(1)
.in range(0, n)
en su lugar genera la secuencia completa de números y luego la itera. La complejidad esO(n)
. La complejidad dein set(range(0, n))
todavía esO(n)
porque la construcción de un conjunto tiene una complejidad temporal deO(n)
ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt> python -m timeit '10000 <= 10 <= 30000'
> python -m timeit '10 in range(10000, 30001)'
> python -m timeit '10 in set(range(10000, 30001))'
fuente
range
(oxrange
en python2) devuelve un generador, por lo que no puede probarlo repetidamente.4 in range(1,4)
es falso. Así que mejor use el1 >= r <= 4
ya que evita posibles errores por parte de los recién llegados1.5 in r
daFalse
, incluso en 3.4. Esta respuesta solo es buena para enteros.1 <= r <= 4
if a <= x <= b
...) (2.) no funciona para losfloat
tipos (3 .) la prueba de rango no incluye ... muchos desarrolladores pueden introducir errores porque esperan un rango inclusivoSu operador es incorrecto. Debe ser
if number >= 10000 and number <= 30000:
. Además, Python tiene una forma rápida para este tipo de cosas,if 10000 <= number <= 30000:
.fuente
Su fragmento de código,
en realidad comprueba si el número es mayor que 10000 y 30000.
Suponiendo que desea verificar que el número esté en el rango de 10000 a 30000, puede usar la comparación de intervalos de Python:
Esta característica de Python se describe más detalladamente en la documentación de Python .
fuente
fuente
El problema con las comparaciones es que pueden ser difíciles de depurar cuando pones un lugar
>=
donde debería haber un<=
Python te permite simplemente escribir lo que quieres decir con palabras
En Python3, debe usar en
range
lugar dexrange
.editar: Las personas parecen estar más preocupadas por las marcas de microbench y lo geniales que son las operaciones de encadenamiento. Mi respuesta es sobre la programación defensiva (menos superficie de ataque para errores).
Como resultado de un reclamo en los comentarios, he agregado el micro benchmark aquí para Python3.5.2
Si le preocupa el rendimiento, puede calcular el rango una vez
fuente
range(10000, 30001)
en Python3. No crea una listaxrange
en Python2, orange
en Python3 tienen pruebas de membresía. Pruébalo tú mismo si no crees.<=
solo es más eficiente porque no crea un objeto de rango. Ambas formas como O (1). El punto es que el OP estaba tratando de hacerlo a su manera y terminó con un error . El código rápido que está mal es peor.Defina el rango entre los números:
Entonces úsalo:
fuente
range
no cuenta el último valor 10 en su caso.range(1,11)
es correcto, si necesita comparar entre 1 y 10Hay dos formas de comparar tres enteros y verificar si b está entre a y c :
y
El primero parece más legible, pero el segundo corre más rápido .
Comparemos usando dis.dis :
y usando timeit :
Además, puede usar el rango , como se sugirió anteriormente, sin embargo, es mucho más lento.
fuente
Supongamos que hay 3 no negativos números enteros:
a
,b
, yc
. Hablando matemáticamente, si queremos determinar sic
está entrea
eb
, inclusive, uno puede usar esta fórmula:o en Python:
fuente
Desea que la salida imprima la declaración dada si y solo si el número cae entre 10,000 y 30,000.
El código debería ser;
fuente
La condición debería ser,
La razón para usar
number == 10000
es que si el valor del número es 50000 y si usamosnumber >= 10000
la condición pasará, que no es lo que desea.fuente