Python 即使IF语句为TRUE,Else语句也会执行

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]:

我在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]:
                    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:在这种情况下,你真的需要向我们展示能够体现问题的可运行代码。我找到了解决方案!我来回答