Что происходит с моей программой на Python, скажите, пожалуйста? Как оба утверждения if else могут быть истинными?

В настоящее время я использую 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

См. также:  Создание ТОЛЬКО помеченных версий с CruiseControl.net или TeamCity
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 4
  1. ISHANT KUMAR

    вы проверяете несколько раз, на одной итерации условие может вернуть один ответ, на следующей — другой, в вашем случае сначала он делится на 1, печатает последовательно, затем не делится на 2 и печатает это простое число, затем встречается оператор break , сделайте отдельную проверку на ‹2, а затем переберите числа, а затем, если это ничего не вернет, напечатайте. Это простое число, как это

    x = input("Enter a number: ")
    x = int(x)
    
    
    def my_func(y):
        if y<2:
            print("It is smaller than 2")
            return
        else:
            # A prime will not have any factors greater than 1
            for i in range(2, y):
                if y % i == 0:
                    print("It is consecutive")
                    return
            print("It is prime")
    my_func(x)
    

    Обратите внимание, что i = 1 всегда будет давать y % i == 0 как True person ISHANT KUMAR; 10.05.2021

  2. ISHANT KUMAR

    Результат, который вы получаете, связан с циклом for. Для первой итерации условие if оценивается как истинное (15 % 1 == 0). Таким образом, печатается последовательно, остальные условия elif и другие условия не проверяются для второй итерации, если условие ложно (15% 2 == 0 ложно). Он переходит к условию elif (y ‹ 2), которое является ложным тоже , так как 15 ‹ 2 ложно . Поток переходит в блок else и делает все, что в нем указано (в этом случае печатает его простое и прерывает цикл). Следовательно, вы получаете оба утверждения. Вывод. Блок if-else не выполняется одновременно. Это связано с тем, что цикл for изменяет условие и, следовательно, результат

  3. ISHANT KUMAR

    Итак, ваш цикл for делает следующее:

    for i in range(1, 15): # Iterate over 1,2,3,4,..
        # 1 - [(15 % 1) = 0, True, print("It is consecutive")
        # 2 - [(15 % 2) != 0, False...
        #      (y < 2), False...
        #      print("It is prime")]
    

    Я подозреваю, что вы хотите что-то вроде следующего:

    x = input("Enter a number: ")
    x = int(x)
    
    def my_func(y):
        # Any number less than 2 is not prime
        if y < 2:
            print("It is smaller than 2")
            # Exit the function early and don't continue onto the for loop
            return
        for i in range(2, y):
            # if this evaluates as True for any of i < y then y is not prime
            if y % i == 0:
                print("It is consecutive")
                # Exit the function and do not complete the for loop
                return
        # If we have reached here then the for loop has executed fully and no values of i have been found to be factors of y, therefore y is prime
        print("It is prime")
    
    my_func(x)
    
  4. ISHANT KUMAR

    Это не True в нескольких if ветвях. но для разных значений цикла for. Если этот код является тестом на простоту, он должен быть больше похож на этот

    def my_func(y):
        if y < 2:
            print("Lower than 2")
            return
        for i in range(2, y):
            if y % i == 0:
                print("It is consecutive, because of", i)
                break
        else:
            print("It is prime")
    
    # else is triggered if no `break` used
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: