2016-01-20 6 views
-1

Простая простая функция. Цикл не запускается, когда x < 2. Я не совсем понимаю, почему. Может кто-нибудь объяснить? Я понимаю, что мой начальный диапазон равен 2, но это только для i; почему это должно повлиять на x?Почему этот питон для цикла диапазона не работает?

спасибо.

def is_prime (x): 
    for i in range(2, x-1, 1): 
     if (x % i == 0): 
      return False 
    return True 

Спасибо всем. Боже, я не могу поверить, как я упускал из виду вызов максимального диапазона.

+2

Примечание: вам не нужен дополнительный аргумент '1'; шаг по умолчанию соответствует этому значению. – AMACB

+0

Поскольку ваш диапазон равен 2..x-1, когда x <2, ваш диапазон пуст. – AChampion

ответ

1

range(lower_bound, upper_bound, step) произносит последовательность чисел, начинающихся с lower_bound и увеличивается на step до upper_bound. В вашем случае, когда x = 1, range(2,x-1,1) произведет пустую последовательность, потому что ваша нижняя граница больше вашей верхней границы, но ваш шаг положительный. Другими словами, нет последовательности, которая начинается с 2 и заканчивается на 0 (x-1), но увеличивается на 1.

Вы написали свой цикл for с предположением, что пройденное ему число будет 2 или более , Возможно, вам придется добавить сценарии «базового случая», когда аргумент меньше 2.

+0

'upper_bound' не входит в вывод. Это upper_bound-1. – floydn

-1

Итерация по пустой последовательности не приводит к итерациям.

>>> range(2, 1, 1) 
[] 
0

Вот что i собирается перебрать:

>>> x = 1 
>>> range(2, x-1, 1) 
[] 

Это пустой массив! Здесь ничего не поделаешь.

1

Вы сдаете i пробег целых чисел 2, 3, 4, ..., x-1. Когда x < 2, диапазон пуст, и цикл никогда не вводится (так что тело цикла вообще не будет выполняться).

Собственно, для чего это стоит, петля пуста, когда x <= 3. Это связано с тем, что range(A, B) python будет представлять собой ряд целых чисел n таких, что A <= n < B. Обратите внимание на строгое неравенство в правой части.

Смежные вопросы