2013-07-01 17 views
9

Piszę prosty algorytm do sprawdzania pierwszości liczby całkowitej i mam problem tłumaczenia tego kodu Java w Pythonie:Co to jest odpowiednik Pythona standardowej pętli for Java?

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

Tak, ja już próbuje to wykorzystać, ale „m oczywiście omijając przez podział 3:

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

'o (a, b, c) {_}' -> 'a; while (b) {_; do; } '- blokowanie problemów z zakresu i borykanie się z' kontynuuj'. Ostatni składnik każdego konstruktu jest oceniany * po * każdej ocenie ciała pętli. – user2246674

+0

Możesz zajrzeć do http://blog.startifact.com/posts/older/what-is-pythonic.html w odniesieniu do tłumaczenia java (lub innych języków) na pythona - nie zapomnij bądź pytony! – Singular1ty

Odpowiedz

19

jedynym for -loop w Pythonie jest technicznie "dla-siebie", więc można użyć coś jak

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

Oczywiście, Python można to zrobić lepiej niż to:

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

byłyby równoważne, jak również (przy założeniu, że istnieje return true na końcu tej pętli Java). Rzeczywiście, ten ostatni będzie uważany za sposób podejścia do niego.


referencyjny:

+0

Dlaczego używane jest 'i% 3'? – hexafraction

+0

@hexafraction To był mój błąd, dzięki za spostrzeżenie. – arshajii

+0

Python ma pętle while ... Czy źle interpretuję część odpowiedzi? – mipadi

4

bezpośredni przekład będzie:

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

użyć podstawowego Python for i in range pętlę:

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

w A Java dla pętli, etap (The i += 2 część w swoim przykładzie) pojawia się na końcu pętli, tuż przed powtarza. Przetłumaczony na jakiś czas, Twój pętli byłoby równoznaczne z:

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

Które w Pythonie jest podobna:

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

Można jednak uczynić to bardziej „pythonic” i łatwiejsze do odczytania za pomocą Pythona xrange funkcja, która pozwala na określenie step parametr:

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