Python 程序仍然会通过;否则";即使;如果;条件已经满足
我遇到了一个奇怪的问题,一直阻碍着我继续我的计划。下面,我编写了一个WHILE语句,它循环遍历一个代码块,直到变量Python 程序仍然会通过;否则";即使;如果;条件已经满足,python,if-statement,while-loop,Python,If Statement,While Loop,我遇到了一个奇怪的问题,一直阻碍着我继续我的计划。下面,我编写了一个WHILE语句,它循环遍历一个代码块,直到变量scont不再大于0 scount = 42 # this is a sample data only half = scount / 2 while scount > 0: if half > 0: scount -= half half -= half else: scount = 0 在第一
scont
不再大于0
scount = 42 # this is a sample data only
half = scount / 2
while scount > 0:
if half > 0:
scount -= half
half -= half
else:
scount = 0
在第一个循环中,程序将看到变量
half
大于0。然后,half
将scont
减半,并将其自身设置为0。在第二个循环中,程序将发现half
不再大于0,因此程序将移动到ELSE语句并将scont
设置为0。这将结束WHILE语句的循环,我们得到了变量0的所有值。这里的问题是,在程序将half
设置为0后,它直接跳到ELSE语句并将scont
设置为0。为什么会这样?我已经写下了您的程序正在做什么,希望这能有所帮助
loop 1:
scount = 42
half = 21
half > 0, so
scount = 21
half = 0
loop 2:
scount = 21
half = 0
half < 0, so
scount = 0
stop, scount is not > 0
循环1:
童子军=42
一半=21
一半>0,所以
童子军=21
一半=0
循环2:
童子军=21
一半=0
一半小于0,所以
Scont=0
停止,Scont未>0
您的程序只循环两次,并且在第一个循环中,一半仅大于0(然后将其设置为0)。因此,任何后续循环都不会执行if语句代码,因为一半不大于0。然后,它运行else代码,将scound设置为0,这意味着循环条件不再为真,并结束。我已经写出了程序正在执行的操作,希望这能有所帮助
loop 1:
scount = 42
half = 21
half > 0, so
scount = 21
half = 0
loop 2:
scount = 21
half = 0
half < 0, so
scount = 0
stop, scount is not > 0
循环1:
童子军=42
一半=21
一半>0,所以
童子军=21
一半=0
循环2:
童子军=21
一半=0
一半小于0,所以
Scont=0
停止,Scont未>0
您的程序只循环两次,并且在第一个循环中,一半仅大于0(然后将其设置为0)。因此,任何后续循环都不会执行if语句代码,因为一半不大于0。然后,它运行else代码,将scound设置为0,这意味着循环条件不再为真,它将结束。如果我理解正确,它将运行,例如:
scount = 2
half = 1
while loop (true)
if scount>0 (true)
scount = 2-1 = 1
half = 1-1 = 0
while loop (true)
if half>0 (false)
scount = 0
while loop (false)
因此,它不会直接跳转,只在您输入else语句的while循环的下一次、最后一次迭代下运行。如果我理解正确,它将运行,例如:
scount = 2
half = 1
while loop (true)
if scount>0 (true)
scount = 2-1 = 1
half = 1-1 = 0
while loop (true)
if half>0 (false)
scount = 0
while loop (false)
因此,它不会直接跳转,只会在while循环的下一次、最后一次迭代下进入else语句,程序会完全按照它应该的方式运行 放一些打印语句以理解:
scount = 42 # this is a sample data only
half = scount / 2
loop_count=0
while scount > 0:
loop_count += 1
print(loop_count)
print('Outside IF-ELSE: scount is ',scount)
print('Outside IF-ELSE: half is ',half)
print()
if half > 0:
scount -= half
half -= half
print('inside \'if\' block scount is', scount)
print('inside \'if\' block half is', half)
print()
else:
scount = 0
print('inside \'else\' block scount is', scount)
print('inside \'else\' block half is', half)
print()
输出将是:
1
Outside IF-ELSE: scount is 42
Outside IF-ELSE: half is 21.0
inside 'if' block scount is 21.0
inside 'if' block half is 0.0
2
Outside IF-ELSE: scount is 21.0
Outside IF-ELSE: half is 0.0
inside 'else' block scount is 0
inside 'else' block half is 0.0
在第一个循环中,一半is 21程序控制进入“if”块,其值变为0,不进入else循环
在第二个循环中,当half设置为0时,它不能进入“if”块,因为half必须大于0,而它不是,因此它直接跳到“else”块
现在,在'else'块中,Scont也被设置为0,这样当循环终止程序时,它就不能进入了
希望你能弄清楚 程序完全按照它应该的方式运行 放一些打印语句以理解:
scount = 42 # this is a sample data only
half = scount / 2
loop_count=0
while scount > 0:
loop_count += 1
print(loop_count)
print('Outside IF-ELSE: scount is ',scount)
print('Outside IF-ELSE: half is ',half)
print()
if half > 0:
scount -= half
half -= half
print('inside \'if\' block scount is', scount)
print('inside \'if\' block half is', half)
print()
else:
scount = 0
print('inside \'else\' block scount is', scount)
print('inside \'else\' block half is', half)
print()
输出将是:
1
Outside IF-ELSE: scount is 42
Outside IF-ELSE: half is 21.0
inside 'if' block scount is 21.0
inside 'if' block half is 0.0
2
Outside IF-ELSE: scount is 21.0
Outside IF-ELSE: half is 0.0
inside 'else' block scount is 0
inside 'else' block half is 0.0
在第一个循环中,一半is 21程序控制进入“if”块,其值变为0,不进入else循环
在第二个循环中,当half设置为0时,它不能进入“if”块,因为half必须大于0,而它不是,因此它直接跳到“else”块
现在,在'else'块中,Scont也被设置为0,这样当循环终止程序时,它就不能进入了
希望你能弄清楚 它不会“直接”跳转到
else
语句。在half达到0后,它将再次从while循环的顶部开始,然后转到else
语句。half-=half
->在第一次while迭代half=0之后。你的意思是half=scount/2
?@JaxTeller好吧,这太尴尬了。如果条件满足后,为什么在IF条件之后移动到Else条件,是因为打印的缩进。我将打印行设置为在WHILE语句的同一缩进上打印结果。打印只会得到最后一个循环,即0。这意味着我做了一个错误的假设。它没有“直接”跳转到else
语句。在half达到0后,它将再次从while循环的顶部开始,然后转到else
语句。half-=half
->在第一次while迭代half=0之后。你的意思是half=scount/2
?@JaxTeller好吧,这太尴尬了。如果条件满足后,为什么在IF条件之后移动到Else条件,是因为打印的缩进。我将打印行设置为在WHILE语句的同一缩进上打印结果。打印只会得到最后一个循环,即0。这意味着我做了一个错误的假设。好吧,这很尴尬。如果条件满足后,为什么在IF条件之后移动到Else条件,是因为打印的缩进。我将打印行设置为在WHILE语句的同一缩进上打印结果。打印只会得到最后一个循环,即0。这意味着我做了一个错误的假设。很好,这都是一次学习经历。希望一切顺利。好吧,这太尴尬了。如果条件满足后,为什么在IF条件之后移动到Else条件,是因为打印的缩进。我将打印行设置为在WHILE语句的同一缩进上打印结果。打印只会得到最后一个循环,即0。这意味着我做了一个错误的假设。很好,这都是一次学习经历。希望一切顺利。好吧,这太尴尬了。如果条件满足后,为什么在IF条件之后移动到Else条件,是因为打印的缩进。我将打印行设置为在WH的相同缩进上打印结果