鱼C论坛

 找回密码
 立即注册
查看: 2171|回复: 25

[已解决]if循环问题

[复制链接]
发表于 2020-10-5 17:19:05 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 见招拆招小冬喜 于 2020-10-5 17:31 编辑

不明白为什么这个代码无法运行,下面那个代码就可以?他们只有标红部分不同

错误代码:
x=7
i=1
flag=0
while i<=100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag=1
    else:
        x=7*(i+1)
        i+=1
if flag==1:
    print("楼梯阶数是:",x)
else:
    print("未在设定范围内找到答案")

结果:
=========================== RESTART: d:/我的文档/桌面/1.py ===========================

正确代码:
x=7
i=1
flag=0
while i<=100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag=1
    else:
        x=7*(i+1)
    i+=1
if flag==1:
    print("楼梯阶数是:",x)
else:
    print("未在设定范围内找到答案")

结果:
=========================== RESTART: d:/我的文档/桌面/1.py ===========================
楼梯阶数是: 119

请各位指教~
最佳答案
2020-10-5 17:51:14
本帖最后由 昨非 于 2020-10-5 17:52 编辑

加个打印助于理解
x=7
i=1
flag=0
while i<=100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag=1
    else:
        x=7*(i+1)
        i+=1
        print(i)
if flag==1:
    print("楼梯阶数是:",x)
else:
    print("未在设定范围内找到答案")

满意的话,记得给个【最佳】
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-5 17:23:50 | 显示全部楼层
python严格要求缩进,你上面的代码不符合缩进规则,既没有与x对齐,也没有与else对齐,所以缩进报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-5 17:25:17 | 显示全部楼层
IndentationError: unindent does not match any outer indentation level
翻译为:缩进错误:未缩进与任何外部缩进级别都不匹配
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-5 17:30:05 | 显示全部楼层
昨非 发表于 2020-10-5 17:23
python严格要求缩进,你上面的代码不符合缩进规则,既没有与x对齐,也没有与else对齐,所以缩进报错

不好意思,这个是我输入问题事的疏忽,但是即使正确缩进了仍然无法运行,并没有缩进报错提示,只有这样的界面:
>>>
=========================== RESTART: d:/我的文档/桌面/1.py ===========================
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-5 17:33:21 | 显示全部楼层
见招拆招小冬喜 发表于 2020-10-5 17:30
不好意思,这个是我输入问题事的疏忽,但是即使正确缩进了仍然无法运行,并没有缩进报错提示,只有这样的 ...

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

使用道具 举报

发表于 2020-10-5 17:40:34 | 显示全部楼层
见招拆招小冬喜 发表于 2020-10-5 17:30
不好意思,这个是我输入问题事的疏忽,但是即使正确缩进了仍然无法运行,并没有缩进报错提示,只有这样的 ...

你如果改成与x相同的缩进,那么你的代码就错了,i作为循环变量,每循环一次执行i+=1
不能放到else里,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-5 17:40:47 | 显示全部楼层

唯一的区别就是我标红的部分,一个是缩进到else之后,一个是跟else齐平。我不太明白这两者的区别是什么?只要if的条件不满足,不管是不是在else的范围内,i=i+1都能执行,为什么缩进到else之后就不能运行了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-5 17:43:45 | 显示全部楼层
昨非 发表于 2020-10-5 17:40
你如果改成与x相同的缩进,那么你的代码就错了,i作为循环变量,每循环一次执行i+=1
不能放到else里,

为什么不可以呢?
不满足if就执行else。那把循环放在else里,不是就可以执行了吗?如果满足if,直接撤出循环,i也不必再循环了。
是不是我的理解哪里不对...我有点懵了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-5 17:50:11 | 显示全部楼层
见招拆招小冬喜 发表于 2020-10-5 17:43
为什么不可以呢?
不满足if就执行else。那把循环放在else里,不是就可以执行了吗?如果满足if,直接撤出 ...

放到else里,准确的说是进入死循环了,它会停在i = 17处,虽然flag = 1了,但是i+=1,被else语句跳过了,循环出不来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-5 17:51:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 昨非 于 2020-10-5 17:52 编辑

加个打印助于理解
x=7
i=1
flag=0
while i<=100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag=1
    else:
        x=7*(i+1)
        i+=1
        print(i)
if flag==1:
    print("楼梯阶数是:",x)
else:
    print("未在设定范围内找到答案")

满意的话,记得给个【最佳】
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-5 17:57:22 | 显示全部楼层
用while循环的确应该注意会不会进入死循环,楼上那位兄弟说得对,emmm我试了一下,加个break就可以跳出循环了
x=7
i=1
flag=0
while i<=100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag=1
        break
    else:
        x=7*(i+1)
        i+=1
if flag==1:
    print("楼梯阶数是:",x)
else:
    print("未在设定范围内找到答案")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-5 18:02:24 | 显示全部楼层
昨非 发表于 2020-10-5 17:50
放到else里,准确的说是进入死循环了,它会停在i = 17处,虽然flag = 1了,但是i+=1,被else语句跳过了, ...

不明白为什么“虽然flag = 1了,但是i+=1,被else语句跳过了,循环出不来了”。flag=1为什么会出不来循环?这个跟else有什么关系?

我按您的代码做了尝试:
和您的代码相同时,结果为:
>>>
=========================== RESTART: d:/我的文档/桌面/1.py ===========================
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

如果把i与else齐平(代码如下),是这种情况,为什么i变到101,x才119?

x=7
i=1
flag=0
while i<=100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag=1
    else:
        x=7*(i+1)
    i+=1
    print(i)
if flag==1:
    print("楼梯阶数是:",x)
else:
    print("未在设定范围内找到答案")

结果:
=========================== RESTART: d:/我的文档/桌面/1.py ===========================
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
楼梯阶数是: 119
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-5 18:04:54 | 显示全部楼层
沐羽尘 发表于 2020-10-5 17:57
用while循环的确应该注意会不会进入死循环,楼上那位兄弟说得对,emmm我试了一下,加个break就可以跳出循环 ...

能告诉我为什么while会死循环吗?如果if条件符合,if的循环不是就赋值flag=1,这样不是就满足下面的if条件了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-5 18:07:33 From FishC Mobile | 显示全部楼层
见招拆招小冬喜 发表于 2020-10-5 18:04
能告诉我为什么while会死循环吗?如果if条件符合,if的循环不是就赋值flag=1,这样不是就满足下面的if条 ...

但是跳出while循环的条件是i大于100,你的i到17停了,不就一直在while循环里出不来了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-5 18:09:51 From FishC Mobile | 显示全部楼层
见招拆招小冬喜 发表于 2020-10-5 18:04
能告诉我为什么while会死循环吗?如果if条件符合,if的循环不是就赋值flag=1,这样不是就满足下面的if条 ...

if的条件是flag等于1没错,但前提是while执行完了才会执行if
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-5 18:11:37 | 显示全部楼层
昨非 发表于 2020-10-5 18:07
但是跳出while循环的条件是i大于100,你的i到17停了,不就一直在while循环里出不来了吗

哦哦,是不是在成功赋值flag=1之后,i 还在循环,直到while为假。但如果把 i+=1 放在else之后,赋值flag=1之后,else不再执行,i 不再循环变大,始终满足while为真就出不去了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-5 18:12:15 From FishC Mobile | 显示全部楼层
见招拆招小冬喜 发表于 2020-10-5 18:11
哦哦,是不是在成功赋值flag=1之后,i 还在循环,直到while为假。但如果把 i+=1 放在else之后,赋值flag= ...

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

使用道具 举报

 楼主| 发表于 2020-10-5 18:12:38 | 显示全部楼层

我终于懂了!谢谢您!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-5 18:12:50 | 显示全部楼层
见招拆招小冬喜 发表于 2020-10-5 18:04
能告诉我为什么while会死循环吗?如果if条件符合,if的循环不是就赋值flag=1,这样不是就满足下面的if条 ...

楼上那位说的对呀,你都写了while i<=100,但i最后只能在17,当然跳不出循环了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-10-5 18:17:36 | 显示全部楼层
沐羽尘 发表于 2020-10-5 18:12
楼上那位说的对呀,你都写了while i

哈哈我一直理解错了,我一直以为是跳不出if的循环,忘记了下面的程序是跟while并列的。持续给i赋值跳出while循环,然后才能执行下面的。
小白出丑了,请见谅...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-9 14:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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