2013-07-01 21 views
9

Tôi đang viết một thuật toán đơn giản để kiểm tra tính nguyên của một số nguyên và tôi đang gặp một vấn đề dịch mã Java này vào Python:Python tương đương với chuẩn Java cho vòng lặp là gì?

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

Vì vậy, tôi đã cố gắng để sử dụng này, nhưng tôi đang rõ ràng là bỏ qua việc phân chia bởi 3:

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

'for (a; b; c) {_} '->' a; trong khi (b) {_; c; } '- chặn các vấn đề phạm vi và phải đối phó với' tiếp tục'. Thành phần cuối cùng của cấu trúc cho mỗi được đánh giá * sau * mỗi đánh giá của thân vòng lặp. – user2246674

+0

Bạn có thể muốn xem http://blog.startifact.com/posts/older/what-is-pythonic.html liên quan đến việc muốn dịch java (hoặc các ngôn ngữ khác) sang python - đừng quên là pythonic! – Singular1ty

Trả lời

19

các chỉ for -loop bằng Python là một kỹ thuật "for-each", vì vậy bạn có thể sử dụng một cái gì đó giống như

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

Tất nhiên, Python có thể làm tốt hơn thế:

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

sẽ tương đương cũng (giả sử có một return true vào cuối rằng vòng lặp Java). Thật vậy, sau này sẽ được coi là cách Pythonic để tiếp cận nó.


tham khảo:

+0

Tại sao 'i% 3' được sử dụng? – hexafraction

+0

@hexafraction Đó là lỗi của tôi, cảm ơn vì đã phát hiện ra nó. – arshajii

+0

Python có các vòng lặp ... Hoặc tôi có hiểu sai một phần câu trả lời của bạn không? – mipadi

4

Một bản dịch trực tiếp sẽ là:

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

Sử dụng cơ bản Python for i in range loop:

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

Trong một Java cho vòng lặp, bước (các i += 2 phần trong ví dụ của bạn) xảy ra ở phần cuối của vòng lặp, ngay trước khi nó lặp đi lặp lại. Dịch sang một thời gian, bạn cho vòng lặp sẽ tương đương với:

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

nào trong Python là tương tự:

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

Tuy nhiên, bạn có thể làm điều này nhiều hơn "Pythonic" và dễ đọc hơn bằng cách sử dụng Python xrange chức năng, cho phép bạn chỉ định một tham số step:

for i in xrange(3, math.sqrt(n), 2): 
    if n % i == 0: 
     return False 
Các vấn đề liên quan