paulwang 发表于 2022-9-22 12:14:01

连续if 加一个else 为何不能运行

本帖最后由 paulwang 于 2022-9-22 12:17 编辑

下面的程序没错但是运行后并没有结果显示为什么


a=1

while a<=1000:
    if a%2==1:
      if a%3==2:
            if a%4==3:
                if a%5==4:
                  if a%6==5:
                        if a%7==0:
                            print(a)
                        else:
                              a=a+1

fcage 发表于 2022-9-22 12:29:21

你这个程序,a+=1只有满足你所有if条件(除了最后一个)才会运行,因为else的缩进放到了最后一条if的下面。
一开始a的值是1;不满足第一个if,就不会运行后面的所有东西了,a的值不变,进入死循环了。


看你这程序的意思,应该是所有条件都满足才print,那你可以用and连接条件;或者麻烦点每个if条件*同级别*都加一个else

Twilight6 发表于 2022-9-22 12:30:06


很明显,死循环了

你的第一个 if 条件,在第一次循环时候条件成立,进入该 if 条件下的代码块,开始判断第二个 if 条件语句

第二个 if 条件判断语句很显然 a % 3 = 1 % 3 = 1 不等于 2 所以不成立,又因为此 if 下没有 else 语句进行执行

此次循环所有可执行代码都执行了,到循环结构末尾,准备开始下次循环,下次循环 a 还是为 1 所以同样前面的步骤,进入死循环

你的代码应该改成这样,参考代码:

a = 1

while a <= 1000:
    if a % 2 == 1:
      if a % 3 == 2:
            if a % 4 == 3:
                if a % 5 == 4:
                  if a % 6 == 5:
                        if a % 7 == 0:
                            print(a)
    a = a + 1

执行结果:
119
539
959


jackz007 发表于 2022-9-22 12:39:09

本帖最后由 jackz007 于 2022-9-22 12:50 编辑

1、连续递进式 if 实际上就是同时满足,就是 and 操作符要干的事情
2、a = a + 1 是每次循环都必须要做的事情,不可以条件执行
3、判断条件中并没有 a%4 == 3 这一条
a = 1
while a <= 1000:
    if a % 2 = 1 and a % 3 == 2 and a % 5 == 4 and a % 6 == 5 and a % 7 == 0:
      print(a)
    a += 1
      简化版
for a in range(7 , 1000 , 7):
    if a % 2 = 1 and a % 3 == 2 and a % 5 == 4 and a % 6 == 5:
      print(a)

paulwang 发表于 2022-9-22 12:52:01

谢啦 ,后面自己已经我想通了, 我是小白刚学,所以才问这个问题。
不过python 为何不报错呢, 因为只是执行不下去,其实是没错的对吧

Twilight6 发表于 2022-9-22 12:56:35

paulwang 发表于 2022-9-22 12:52
谢啦 ,后面自己已经我想通了, 我是小白刚学,所以才问这个问题。
不过python 为何不报错呢, 因为只是执 ...



死循环不会报错,实际上程序一直在执行

paulwang 发表于 2022-9-22 12:58:55

Twilight6 发表于 2022-9-22 12:30
很明显,死循环了

你的第一个 if 条件,在第一次循环时候条件成立,进入该 if 条件下的代码块,开始判 ...

我还想了解下如果下面这样也算死循环吗? 第一个条件复合第二个条件不符合的话就没法执行下去了,我的理解对吧
a=1
while a<=1000:
    if a%2==1:
      if a%3==2:
            if a%4==3:
                if a%5==4:
                  if a%6==5:
                        if a%7==0:
                            print(a)
    else:
      a=a+1

fcage 发表于 2022-9-22 13:12:59

paulwang 发表于 2022-9-22 12:58
我还想了解下如果下面这样也算死循环吗? 第一个条件复合第二个条件不符合的话就没法执行下去了,我的理 ...

对的,当你满足第一个条件的时候,就不会执行这个else了,其他地方又没有改变a的值的地方,就会陷入死循环。

Twilight6 发表于 2022-9-22 15:08:10

paulwang 发表于 2022-9-22 12:58
我还想了解下如果下面这样也算死循环吗? 第一个条件复合第二个条件不符合的话就没法执行下去了,我的理 ...


是的,同个缩进下的 if - else 结构才会必须执行 if 或 else 中代码块的其中一个

你这个代码 else 和 第一个 if 同缩进,所以,只有在第一个 if 不满足条件时执行 else

hveagle 发表于 2022-9-23 06:55:58

if
if
if
if
else
#只有这里才搭配

hveagle 发表于 2022-9-23 06:57:30

if
elif(else+if)
elif(else+if)
elif(else+if)
else
#现在就是一个整体了
页: [1]
查看完整版本: 连续if 加一个else 为何不能运行