Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 程序仍然会通过;否则";即使;如果;条件已经满足_Python_If Statement_While Loop - Fatal编程技术网

Python 程序仍然会通过;否则";即使;如果;条件已经满足

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 在第一

我遇到了一个奇怪的问题,一直阻碍着我继续我的计划。下面,我编写了一个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

在第一个循环中,程序将看到变量
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的相同缩进上打印结果