鱼C论坛

 找回密码
 立即注册
查看: 3323|回复: 10

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

[复制链接]
发表于 2022-9-22 12:14:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-22 12:29:21 | 显示全部楼层
你这个程序,a+=1只有满足你所有if条件(除了最后一个)才会运行,因为else的缩进放到了最后一条if的下面。
一开始a的值是1;不满足第一个if,就不会运行后面的所有东西了,a的值不变,进入死循环了。


看你这程序的意思,应该是所有条件都满足才print,那你可以用and连接条件;或者麻烦点每个if条件*同级别*都加一个else
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-9-22 12:52:01 | 显示全部楼层
谢啦 ,后面自己已经我想通了, 我是小白刚学,所以才问这个问题。
不过python 为何不报错呢, 因为只是执行不下去,其实是没错的对吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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



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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

对的,当你满足第一个条件的时候,就不会执行这个else了,其他地方又没有改变a的值的地方,就会陷入死循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-23 06:55:58 | 显示全部楼层
if
if
if
if
else
#只有这里才搭配
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-23 06:57:30 | 显示全部楼层
if
elif(else+if)
elif(else+if)
elif(else+if)
else
#现在就是一个整体了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 17:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表