Что такое эквивалент Python стандартного цикла для Java?

Я пишу простой алгоритм для проверки правильности целого числа, и у меня возникла проблема с переводом этого Java-кода на Python:

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

Итак, я пытался использовать это, но я, очевидно, пропускаю деление на 3:

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

  • Может ли PyPy / RPython использоваться для создания небольшого автономного исполняемого файла?
  • 4 Solutions collect form web for “Что такое эквивалент Python стандартного цикла для Java?”

    Единственный for -loop в Python – это технически «для каждого», поэтому вы можете использовать что-то вроде

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

    Конечно, Python может сделать лучше, чем это:

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

    также будет эквивалентен (если в конце этого цикла Java есть return true ). В самом деле, последний считался бы путинским подходом к нему.


    Справка:

    • for заявлений
    • xrange
    • all

    Прямым переводом будет:

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

    В цикле Java for шаг (часть i += 2 в вашем примере) происходит в конце цикла, как раз перед повторением. Переведенный на некоторое время, цикл for будет эквивалентен:

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

    Что в Python похоже:

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

    Тем не менее, вы можете сделать это более «Pythonic» и легче читать с xrange функции xrange Python, которая позволяет указать параметр step :

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

    Используйте базовый Python for i in range цикле for i in range :

     for i in range(3, math.round(math.sqrt(x)), 2): if (n % i == 0): return false 
    Python - лучший язык программирования в мире.