В настоящее время я использую python3.9
. Я закодировал блок кода Python, в котором я поместил условие if else
, но когда я ввожу свой ввод, например 15
, оба условия становятся истинными, как показано ниже. Я хочу знать, как условие if-else
может быть истинным в обоих случаях. Вы можете увидеть это на следующем снимке экрана, чтобы вы могли хорошо понять и помочь мне в этом:
x = input("Enter a number: ")
x = int(x)
def my_func(y):
for i in range(1, y):
if y % i == 0:
print("It is consecutive")
elif y < 2:
print("It is smaller than 2")
else:
print("It is prime")
break
my_func(x)
Возможно, вам следует добавить: print(i)
перед каждым оператором print()
, чтобы увидеть, что происходит на самом деле. — person ISHANT KUMAR schedule 10.05.2021
Проверьте цикл for. Напечатайте число сразу после цикла for, и все станет ясно. — person ISHANT KUMAR schedule 10.05.2021
Вы делали какую-либо отладку? Я бы рекомендовал прочитать ericlippert.com/2014/03/05. /how-to-debug-small-programs. — person ISHANT KUMAR schedule 10.05.2021
вы проверяете несколько раз, на одной итерации условие может вернуть один ответ, на следующей — другой, в вашем случае сначала он делится на 1, печатает последовательно, затем не делится на 2 и печатает это простое число, затем встречается оператор break , сделайте отдельную проверку на ‹2, а затем переберите числа, а затем, если это ничего не вернет, напечатайте. Это простое число, как это
Обратите внимание, что i = 1 всегда будет давать y % i == 0 как True — person ISHANT KUMAR; 10.05.2021
Результат, который вы получаете, связан с циклом for. Для первой итерации условие if оценивается как истинное (15 % 1 == 0). Таким образом, печатается последовательно, остальные условия elif и другие условия не проверяются для второй итерации, если условие ложно (15% 2 == 0 ложно). Он переходит к условию elif (y ‹ 2), которое является ложным тоже , так как 15 ‹ 2 ложно . Поток переходит в блок else и делает все, что в нем указано (в этом случае печатает его простое и прерывает цикл). Следовательно, вы получаете оба утверждения. Вывод. Блок if-else не выполняется одновременно. Это связано с тем, что цикл for изменяет условие и, следовательно, результат
Итак, ваш цикл for делает следующее:
Я подозреваю, что вы хотите что-то вроде следующего:
Это не
True
в несколькихif
ветвях. но для разных значений циклаfor
. Если этот код является тестом на простоту, он должен быть больше похож на этот