What is Python's equivalent of Java's standard for-loop?
Solution 1
The only for
-loop in Python is technically a "for-each", so you can use something like
for i in xrange(3, int(math.sqrt(n)), 2): # use 'range' in Python 3
if n % i == 0:
return False
Of course, Python can do better than that:
all(n % i for i in xrange(3, int(math.sqrt(n)), 2))
would be equivalent as well (assuming there's a return true
at the end of that Java loop). Indeed, the latter would be considered the Pythonic way to approach it.
Reference:
Solution 2
In a Java for loop, the step (the i += 2
part in your example) occurs at the end of the loop, just before it repeats. Translated to a while, your for loop would be equivalent to:
int i = 3;
while (i < Math.sqrt(n)) {
if (n % i == 0) {
return false;
}
i += 2;
}
Which in Python is similar:
i = 3
while i < math.sqrt(n):
if n % i == 0:
return False
i += 2
However, you can make this more "Pythonic" and easier to read by using Python's xrange
function, which allows you to specify a step
parameter:
for i in xrange(3, math.sqrt(n), 2):
if n % i == 0:
return False
Solution 3
Use a basic Python for i in range
loop:
for i in range(3, math.round(math.sqrt(x)), 2):
if (n % i == 0):
return false
Deneb A.
Updated on July 02, 2020Comments
-
Deneb A. almost 4 years
I'm writing a simple algorithm to check the primality of an integer and I'm having a problem translating this Java code into Python:
for (int i = 3; i < Math.sqrt(n); i += 2) { if (n % i == 0) return false; }
So, I've been trying to use this, but I'm obviously skipping the division by 3:
i = 3 while (i < int(math.sqrt(n))): i += 2 # where do I put this? if (n % i == 0): return False
-
mipadi almost 11 yearsPython has while loops… Or am I misinterpreting part of your answer?
-
Montre almost 11 years@mipadi I think he meant Python doesn't have the C-like
for
loop that merges an initializer, stop condition, and step statement. That is: the onlyfor
in Python is aforeach
. -
arshajii almost 11 yearsIndeed, I clarified that statement.