Python двойная печать с петлей - PullRequest
0 голосов
/ 26 августа 2018

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

for n in (2, (k / 2)):
    if k % n == 0:
        print ("Yes")
    else:
        print ("No")

Проблема в том, что я получаю два отпечатка, иногда противоречивые, такие как Yes и No для 3, 25, 35 и др.числа.

Моя цель - определить простые числа.

Кстати, я использую PyCharm.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

(2, (k / 2)) - это кортеж из двух значений, это не диапазон.Это означает, что цикл всегда будет повторяться два раза, один со значением 2 и один со значением k / 2.

Вам необходимо создать экземпляр класса range:

for n in range(2, int(k / 2)):
    ...

Этот объект range создаст объект, который может быть повторен, со значениями от 2 до (k / 2) - 1.

0 голосов
/ 26 августа 2018

Синтаксис for n in (a, b) делает не цикл n между значениями a, a+1, a+2, ..., b, он буквально заставляет n принимать значения a, а затем b в качестве синтаксиса (a, b)определяет кортеж, через который вы перебираете.

Вы почти наверняка ищете функцию range(), которая возвращает итерацию, которую вы можете перебрать в цикле for, чтобы n принимала диапазон значений изa до b (не включая b).

Итак:

for n in range(2, int(k / 2)):

обратите внимание, что мы также должны преобразовать результат в целое число с int()так как диапазон не принимает числа с плавающей запятой (десятичные дроби)


Что касается выполнения основного теста, вы не хотите циклически проходить до половины числа, вам нужно толькоподняться до квадратного корня числа.Кроме того, всякий раз, когда вы найдете делитель, вы можете print('no') и break из цикла, но когда число не делит первичного кандидата, вы не можете print('yes'), так как могут быть делители, которых у вас нет 'Т проверено еще.Таким образом, мы можем только print('yes'), если закончим for-loop, не выйдя из него раньше.Этого легче всего достичь с помощью функции:

def is_prime(k):
    if k <= 1:
        return False
    for n in range(2, int(k ** 0.5) + 1):
        if k % n == 0:
            return False
    return True

, и тогда мы видим, что она работает:

>>> is_prime(2)
True
>>> is_prime(3)
True
>>> is_prime(4)
False
>>> is_prime(5)
True
>>> is_prime(6)
False
>>> is_prime(7)
True
>>> is_prime(8)
False
>>> is_prime(9)
False
>>> is_prime(10)
False
>>> is_prime(11)
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...