if循环问题
本帖最后由 见招拆招小冬喜 于 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
请各位指教~ python严格要求缩进,你上面的代码不符合缩进规则,既没有与x对齐,也没有与else对齐,所以缩进报错 IndentationError: unindent does not match any outer indentation level
翻译为:缩进错误:未缩进与任何外部缩进级别都不匹配 昨非 发表于 2020-10-5 17:23
python严格要求缩进,你上面的代码不符合缩进规则,既没有与x对齐,也没有与else对齐,所以缩进报错
不好意思,这个是我输入问题事的疏忽,但是即使正确缩进了仍然无法运行,并没有缩进报错提示,只有这样的界面:
>>>
=========================== RESTART: d:/我的文档/桌面/1.py =========================== 见招拆招小冬喜 发表于 2020-10-5 17:30
不好意思,这个是我输入问题事的疏忽,但是即使正确缩进了仍然无法运行,并没有缩进报错提示,只有这样的 ...
你怎么改的 见招拆招小冬喜 发表于 2020-10-5 17:30
不好意思,这个是我输入问题事的疏忽,但是即使正确缩进了仍然无法运行,并没有缩进报错提示,只有这样的 ...
你如果改成与x相同的缩进,那么你的代码就错了,i作为循环变量,每循环一次执行i+=1
不能放到else里, 昨非 发表于 2020-10-5 17:33
你怎么改的
唯一的区别就是我标红的部分,一个是缩进到else之后,一个是跟else齐平。我不太明白这两者的区别是什么?只要if的条件不满足,不管是不是在else的范围内,i=i+1都能执行,为什么缩进到else之后就不能运行了? 昨非 发表于 2020-10-5 17:40
你如果改成与x相同的缩进,那么你的代码就错了,i作为循环变量,每循环一次执行i+=1
不能放到else里,
为什么不可以呢?
不满足if就执行else。那把循环放在else里,不是就可以执行了吗?如果满足if,直接撤出循环,i也不必再循环了。
是不是我的理解哪里不对...我有点懵了
见招拆招小冬喜 发表于 2020-10-5 17:43
为什么不可以呢?
不满足if就执行else。那把循环放在else里,不是就可以执行了吗?如果满足if,直接撤出 ...
放到else里,准确的说是进入死循环了,它会停在i = 17处,虽然flag = 1了,但是i+=1,被else语句跳过了,循环出不来了 本帖最后由 昨非 于 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("未在设定范围内找到答案")
满意的话,记得给个【最佳】 用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("未在设定范围内找到答案") 昨非 发表于 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
沐羽尘 发表于 2020-10-5 17:57
用while循环的确应该注意会不会进入死循环,楼上那位兄弟说得对,emmm我试了一下,加个break就可以跳出循环 ...
能告诉我为什么while会死循环吗?如果if条件符合,if的循环不是就赋值flag=1,这样不是就满足下面的if条件了吗? 见招拆招小冬喜 发表于 2020-10-5 18:04
能告诉我为什么while会死循环吗?如果if条件符合,if的循环不是就赋值flag=1,这样不是就满足下面的if条 ...
但是跳出while循环的条件是i大于100,你的i到17停了,不就一直在while循环里出不来了吗 见招拆招小冬喜 发表于 2020-10-5 18:04
能告诉我为什么while会死循环吗?如果if条件符合,if的循环不是就赋值flag=1,这样不是就满足下面的if条 ...
if的条件是flag等于1没错,但前提是while执行完了才会执行if 昨非 发表于 2020-10-5 18:07
但是跳出while循环的条件是i大于100,你的i到17停了,不就一直在while循环里出不来了吗
哦哦,是不是在成功赋值flag=1之后,i 还在循环,直到while为假。但如果把 i+=1 放在else之后,赋值flag=1之后,else不再执行,i 不再循环变大,始终满足while为真就出不去了? 见招拆招小冬喜 发表于 2020-10-5 18:11
哦哦,是不是在成功赋值flag=1之后,i 还在循环,直到while为假。但如果把 i+=1 放在else之后,赋值flag= ...
对 昨非 发表于 2020-10-5 18:12
对
我终于懂了!谢谢您! 见招拆招小冬喜 发表于 2020-10-5 18:04
能告诉我为什么while会死循环吗?如果if条件符合,if的循环不是就赋值flag=1,这样不是就满足下面的if条 ...
楼上那位说的对呀,你都写了while i<=100,但i最后只能在17,当然跳不出循环了{:10_277:} 沐羽尘 发表于 2020-10-5 18:12
楼上那位说的对呀,你都写了while i
哈哈我一直理解错了,我一直以为是跳不出if的循环,忘记了下面的程序是跟while并列的。持续给i赋值跳出while循环,然后才能执行下面的。
小白出丑了,请见谅...
页:
[1]
2