Skip to content Skip to sidebar Skip to footer

Else Statement Executing Even The If Statement Is True

I have a problem in Python language that is described in a title. for slovo in slova: if pygame.mouse.get_pressed()[0] and slovo['rect'].collidepoint(pygame.mouse.get_pos(

Solution 1:

You have a mixture of tabs and spaces in your code:

Running cat -A test.py (on Unix) yields

for slovo inslova:$
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)$

The ^I indicate tabs.

Thus, the else block is not being interpreted as being at the indentation level on which it appears to be.

Your python code should never mix tabs and spaces for indentation. You can check that your script is not mixing tabs and spaces by running python -t script.py.

In Python you must commit to using either only spaces or only tabs for indentation. PEP8 recommends spaces-only indentation.

You can convert tabs to spaces using the reindent.py program.

Solution 2:

So, even this IF statement is true, ELSE statement is being executed!

I can assure you that this is not what happens.

I notice that in the outline of your code the if is inside a for loop. Make sure that in your actual code the else is not accidentally lined up with the for instead of the if. I've seen this mistake more than once.

In Python, for-else is a valid construct. For example, the following is perfectly valid Python:

for i inrange(10):
    if i < 100:
        passelse:
    print'In else clause'

When run, this prints out In else clause.

Contrast this with the following, which doesn't print anything when run:

for i inrange(10):
    if i < 100:
        passelse:
        print'In else clause'

Solution 3:

It's a question from a long time ago and I stumbled upon it as I was troubleshooting the very same issue - the solution was actually pretty silly and most probably was also the case - as it's a for loop it iterates through every list element, if even one of those elements doesn't fulfill the if condition, it will automatically trigger the else - pretty self-evident but easy to miss for beginners. Well at least that was the problem in my case :)

Solution 4:

Next solution fixed my problem:

    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)

So, I have just added that xy counter that makes my code work how it should work. When IF statement is met, xy becomes 1, if IF statement isn't fulfilled, xy is set to 0 and then this "else" statement executes. At the end of the code, xy is set to 1 again to prevent executing this "else" (if xy == 0) block.

Post a Comment for "Else Statement Executing Even The If Statement Is True"