¿Hay alguna manera más fácil de lograr el siguiente código en C++
como Python
?
for(long a = 1; a <= INT_MAX; a*=2)
for(long b = a; b <= INT_MAX; b*=2)
for(long c = b; c <= INT_MAX; c*=2)
Solo puedo reescribir como bucle while
ya que Python parece no ser compatible.
Como
a = 1
while(a <= INT_MAX):
b = a
while(b <= INT_MAX):
c = b
while(c <= INT_MAX):
c *= 2
b *= 2
a *= 2
Me cuesta leer esto y me pregunto si hay una mejor manera de lograrlo.
3 respuestas
Se lee mejor si se factoriza en un generador.
def geometric_range(start, end, step):
n = start
while n < end:
yield n
n *= step
for a in geometric_range(1, INT_MAX + 1, 2):
for b in geometric_range(a, INT_MAX + 1, 2):
for c in geometric_range(b, INT_MAX + 1, 2):
pass # or whatever
Podrá hacer lo siguiente en Python 3.8, utilizando las expresiones de asignación :
i = 1
while (i := i*2) < INT_MAX:
...
Para este código en particular, puede ser más obvio iterar sobre los bits:
INT_MAX = (1<<31) - 1
def highest_bit(x):
return len(bin(x)) - 3
def bitfor(start, end=INT_MAX):
start = highest_bit(start)
end = highest_bit(end) + 1
for i in range(start, end):
yield 1 << i
for a in bitfor(1):
for b in bitfor(a):
for c in bitfor(b):
pass
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.