我的python程序发生了什么,请告诉我?if-else语句如何都为真?

我的python程序发生了什么,请告诉我?if-else语句如何都为真?,python,if-statement,pycharm,Python,If Statement,Pycharm,我目前正在使用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):

我目前正在使用
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)

x=input(“输入一个数字:”)
x=int(x)
定义我的职能(y):
对于范围(1,y)内的i:
如果y%i==0:
打印(“它是连续的”)
elif y<2:
打印(“小于2”)
其他:
打印(“它是主要的”)
打破
my_func(x)

您要检查多次,在一次迭代条件下可能返回一个aswer,在下一次-另一次,在您的情况下,首先它可被1整除,打印“它是连续的”,然后不可被2整除,然后打印“它是素数”,然后遇到break语句,对进行单独检查。您得到的结果是因为for循环。 对于第一次迭代,if条件的计算结果为true(15%1==0)。因此,打印“它是连续的”,其余的elif和else条件不检查 对于第二次迭代,如果条件为false(15%2==0为false),则转到elif条件(y<2),该条件也为false,因为15<2为false。流进入else块并执行其中指定的任何操作(在本例中,打印“it is prime”并从循环中断) 因此,你得到了这两种说法。
结论-if-else块没有同时执行。这是由于for循环条件发生变化,因此结果发生变化,因此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)
对于范围(1,15)内的i:#迭代1,2,3,4,。。
#1-[(15%1)=0,为真,打印(“它是连续的”)
#2-[(15%2)!=0,错误。。。
#(y<2),假。。。
#打印(“它是主要的”)]
我怀疑你想要的是更像以下的东西:

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)
x=input(“输入一个数字:”)
x=int(x)
定义我的职能(y):
#任何小于2的数都不是素数
如果y<2:
打印(“小于2”)
#尽早退出函数,不要继续for循环
返回
对于范围(2,y)内的i:
#如果这对i
在多个
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
def my_func(y):
如果y<2:
打印(“低于2”)
返回
对于范围(2,y)内的i:
如果y%i==0:
打印(“它是连续的,因为”,i)
打破
其他:
打印(“它是主要的”)
#如果未使用“中断”,则触发else

也许您应该在每个
print()
语句之前添加:
print(i)
,以查看实际情况。检查for循环。在for循环之后打印数字,事情可能会变得清晰。您是否进行过任何调试?我建议阅读。请注意,i=1始终将y%i==0作为真值