2013-07-01 14 views
9

ich einen einfachen Algorithmus Schreiben der Primalität einer ganzen Zahl zu überprüfen, und ich habe ein Problem übersetzen diese Java-Code in Python mit:Was entspricht Pythons Java-Standard for-loop?

for (int i = 3; i < Math.sqrt(n); i += 2) { 
    if (n % i == 0) 
     return false; 
} 

Also, ich habe dies zu nutzen versucht, aber ich ist Skipping offensichtlich die Division durch 3:

i = 3 
while (i < int(math.sqrt(n))): 
    i += 2 # where do I put this? 
    if (n % i == 0): 
     return False 
+1

'für (a, b, c) {_}' -> 'a; während (b) {_; c; } '- Scoping-Probleme ausschließen und sich mit' continue' beschäftigen. Die letzte Komponente des for-each-Konstrukts wird nach jeder Auswertung des Schleifenkörpers ausgewertet. – user2246674

+0

Vielleicht möchten Sie einen Blick auf http://blog.startifact.com/posts/older/what-is-pythonic.html werfen, um Java (oder andere Sprachen) in python zu übersetzen - vergessen Sie nicht sei Python! – Singular1ty

Antwort

19

die einzigen for -loop in Python ist technisch gesehen ein "for-each", so dass Sie so etwas wie

for i in xrange(3, int(math.sqrt(n)), 2): # use 'range' in Python 3 
    if n % i == 0: 
     return False 
verwenden können

Natürlich kann Python besser als das:

all(n % i for i in xrange(3, int(math.sqrt(n)), 2)) 

wäre gleichbedeutend auch (vorausgesetzt, es gibt ein return true am Ende dieser Java-Schleife). In der Tat würde letzteres als der Weg betrachtet werden, sich ihm zu nähern.


Referenz:

+0

Warum wird 'i% 3' verwendet? – hexafraction

+0

@hexafraction Das war mein Fehler, danke, dass ich es gesehen habe. – arshajii

+0

Python hat While-Schleifen ... Oder interpretiere ich einen Teil Ihrer Antwort falsch? – mipadi

4

Eine direkte Übersetzung wäre:

for i in range(3, int(math.sqrt(n)), 2): 
    if n % i == 0: 
     return False 
1

Verwenden Sie eine grundlegende Python for i in range Schleife:

for i in range(3, math.round(math.sqrt(x)), 2): 
    if (n % i == 0): 
     return false 
2

In einem Java-for-Schleife, den Schritt (der i += 2 in Ihrem Beispiel Teil) tritt am Ende der Schleife, kurz bevor es wiederholt. Übersetzt in eine Weile, würde Ihre for-Schleife zu entsprechen:

int i = 3; 
while (i < Math.sqrt(n)) { 
    if (n % i == 0) { 
     return false; 
    } 
    i += 2; 
} 

, die in Python ist ähnlich:

i = 3 
while i < math.sqrt(n): 
    if n % i == 0: 
     return False 
    i += 2 

Sie können jedoch diese mehr „Pythonic“ und einfacher durch die Verwendung von Python zu lesen xrange Funktion, die Ihnen einen step Parameter angeben können:

for i in xrange(3, math.sqrt(n), 2): 
    if n % i == 0: 
     return False