Python 即使IF语句为TRUE,Else语句也会执行
我在Python语言中遇到了一个问题,在标题中描述了这个问题Python 即使IF语句为TRUE,Else语句也会执行,python,if-statement,Python,If Statement,我在Python语言中遇到了一个问题,在标题中描述了这个问题 for slovo in slova: if pygame.mouse.get_pressed()[0] and slovo["rect"].collidepoint(pygame.mouse.get_pos()): for i in range (len(randRijec)): if slovo["name"] in randRijec[i]:
for slovo in slova:
if pygame.mouse.get_pressed()[0] and slovo["rect"].collidepoint(pygame.mouse.get_pos()):
for i in range (len(randRijec)):
if slovo["name"] in randRijec[i]:
if i == 0:
slovo1 = randRijec[i].upper()
prvoSlovo = 1
...
...
else:
pogresnoBrojac += 1
slova.remove(slovo)
所以,即使这个语句为true,ELSE语句也正在执行!但是,如果满足if语句,则应跳过else语句
如何解决这个问题
p、 我以前有过几次这个问题,但我没能解决它
所以,即使这个语句为true,ELSE语句也正在执行
我可以向你保证,事情并非如此
我注意到在代码的大纲中,if位于for循环中。确保在实际代码中,else并没有意外地和for而不是if对齐。这个错误我见过不止一次
在Python中。例如,以下是完全有效的Python:
for i in range(10):
if i < 100:
pass
else:
print 'In else clause'
所以,即使这个语句为true,ELSE语句也正在执行
我可以向你保证,事情并非如此
我注意到在代码的大纲中,if位于for循环中。确保在实际代码中,else并没有意外地和for而不是if对齐。这个错误我见过不止一次
在Python中。例如,以下是完全有效的Python:
for i in range(10):
if i < 100:
pass
else:
print 'In else clause'
代码中混合了制表符和空格: 在Unix上运行cat-A test.py会产生
for slovo in slova:$
if pygame.mouse.get_pressed()[0] and slovo["rect"].collidepoint(pygame.mouse.get_pos()):$
for i in range (len(randRijec)):$
if slovo["name"] in randRijec[i]:$
if i == 0:$
slovo1 = randRijec[i].upper()$
prvoSlovo = 1$
^I^I^I^I^I^I...$
^I^I^I^I^I^I...$
else:$
pogresnoBrojac += 1$
slova.remove(slovo)$
^I表示选项卡
因此,else块不会被解释为处于它看起来所在的缩进级别
python代码不应该混合使用制表符和空格进行缩进。通过运行python-tscript.py,可以检查脚本是否没有混合制表符和空格
在Python中,您必须承诺只使用空格或制表符进行缩进。建议仅使用空格缩进
您可以使用将制表符转换为空格。您的代码中混合了制表符和空格: 在Unix上运行cat-A test.py会产生
for slovo in slova:$
if pygame.mouse.get_pressed()[0] and slovo["rect"].collidepoint(pygame.mouse.get_pos()):$
for i in range (len(randRijec)):$
if slovo["name"] in randRijec[i]:$
if i == 0:$
slovo1 = randRijec[i].upper()$
prvoSlovo = 1$
^I^I^I^I^I^I...$
^I^I^I^I^I^I...$
else:$
pogresnoBrojac += 1$
slova.remove(slovo)$
^I表示选项卡
因此,else块不会被解释为处于它看起来所在的缩进级别
python代码不应该混合使用制表符和空格进行缩进。通过运行python-tscript.py,可以检查脚本是否没有混合制表符和空格
在Python中,您必须承诺只使用空格或制表符进行缩进。建议仅使用空格缩进
您可以使用将选项卡转换为空格。下一个解决方案修复了我的问题:
for slovo in slova:
if pygame.mouse.get_pressed()[0] and slovo["rect"].collidepoint(pygame.mouse.get_pos()):
xy = 0
for i in range (len(randRijec)):
if slovo["name"] in randRijec[i]:
xy = 1
if i == 0:
slovo1 = randRijec[i].upper()
prvoSlovo = 1
break
if i == 1:
slovo2 = randRijec[i].upper()
drugoSlovo = 1
break
slova.remove(slovo)
if xy == 0:
pogresnoBrojac += 1
...
...
...
xy = 1
pygame.display.update()
time.tick(value)
所以,我刚刚添加了xy计数器,它使我的代码能够正常工作。当满足IF语句时,xy变为1,若未满足IF语句,则xy设置为0,然后执行此else语句。在代码末尾,再次将xy设置为1,以防止在xy==0块时执行此else。下一个解决方案修复了我的问题:
for slovo in slova:
if pygame.mouse.get_pressed()[0] and slovo["rect"].collidepoint(pygame.mouse.get_pos()):
xy = 0
for i in range (len(randRijec)):
if slovo["name"] in randRijec[i]:
xy = 1
if i == 0:
slovo1 = randRijec[i].upper()
prvoSlovo = 1
break
if i == 1:
slovo2 = randRijec[i].upper()
drugoSlovo = 1
break
slova.remove(slovo)
if xy == 0:
pogresnoBrojac += 1
...
...
...
xy = 1
pygame.display.update()
time.tick(value)
所以,我刚刚添加了xy计数器,它使我的代码能够正常工作。当满足IF语句时,xy变为1,若未满足IF语句,则xy设置为0,然后执行此else语句。在代码末尾,再次将xy设置为1,以防止在xy==0块时执行此else。这是一个很久以前的问题,我在对同一问题进行故障排除时偶然发现了它-该解决方案实际上非常愚蠢,很可能也是如此-因为它是一个for循环,它会遍历每个列表元素,如果哪怕其中一个元素不满足if条件,它也会自动触发else——这是不言而喻的,但初学者很容易错过。
好吧,至少这是我的问题:这是一个很久以前的问题,我在解决同一个问题时偶然发现了这个问题-解决方案实际上非常愚蠢,很可能也是这样-因为它是一个for循环,它会迭代每个列表元素,如果哪怕其中一个元素不满足if条件,它也会自动触发else——这是不言而喻的,但初学者很容易错过。
至少在我的例子中,这就是问题所在:请包括一个SSCCE来演示问题。你是说两个块都执行了,还是只执行else块?你确定缩进是正确的吗?检查你的缩进。缩进是正确的,是的,两个块都在执行,如果问题问得正确,为什么是-1?谢谢BTW请包括一个SSCCE来演示这个问题。你是说两个块都被执行了,还是只执行了else块?你确定缩进是正确的吗?检查你的缩进。缩进是正确的,是的,两个块都在执行,如果问题问得正确,为什么是-1?谢谢btwthanks的回答,但我的else语句是用if语句排列的,若您想说else语句是用for one?else语句排列的,它在另一个for循环中执行。请参阅我在问题中的主要评论。谢谢您的回答,但我的else语句是用if语句排列的,如果您想说else语句是用for one?else语句是以
另一个为循环。请看我在问题上的主要评论。毫无疑问,这是一个非常好的建议。但是,在本例中,if和else不是单独使用空格缩进的吗?我确信我在这里遗漏了一些明显的东西。谢谢你,但我无法解决这个问题。当我按正确的方式缩进时,我会不断得到这个问题。@NPE:你说得对;这可能不是真正的问题。然而,根据我的经验,当基本规则得到遵守时,神秘的错误往往会消失。@lucro93:在这种情况下,你真的需要向我们展示能够体现问题的可运行代码。我找到了解决方案!毫无疑问,这是一个很好的建议。但是,在本例中,if和else不是单独使用空格缩进的吗?我确信我在这里遗漏了一些明显的东西。谢谢你,但我无法解决这个问题。当我按正确的方式缩进时,我会不断得到这个问题。@NPE:你说得对;这可能不是真正的问题。然而,根据我的经验,当基本规则得到遵守时,神秘的错误往往会消失。@lucro93:在这种情况下,你真的需要向我们展示能够体现问题的可运行代码。我找到了解决方案!我来回答