Python Forum

Full Version: if conditions in the for indentation doesnt work ?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello Everyone,

I am trying to get the lines that contain test string or if its not found i want to print not found message. However this doesnt seem to work i dont get any messages at all.

I can read text file, i can even make it count with "for line in input:" however none of the if conditions work inside for indentation. Am i missing something ?



def verial():
  
    isimsatırlistesi=list()
    satırsayısı=0
    input = text1.get("1.0",'end-1c')
    for line in input:
        satırsayısı=satırsayısı+1
        if "test" in line:
            isimsatırlistesi.append(int(satırsayısı))
            print(isimsatırlistesi[0,"end"])
            if len.isimsatırlistesi<0:
                print("test not found")
Because everything after line 6 is indented, they are all checked for every element in "input". Did you mean to run them every time, or perhaps some of them are only to be run after the input in exhausted?

Because everything after line 8 is indented further, lines 9-12 are only executed when "test" is found in line. If that test fails, nothing else will be executed. If you want something to happen when the test fails, you'd need an else condition, or just do it after the conditional is done (would happen regardless of the if statement).

if "test" in line:
    # this is only run when the if expression is true
    isimsatırlistesi.append(int(satırsayısı))
    print(isimsatırlistesi[0,"end"])
else:
    # this section is only run when the if expression is false
    print("Condition failed.")

# This section is run after, regardless of the if expression.
    
Thanks for the answer, interestingly this code cant seem to find test, i tried if line.startswith method to no success.
Probably I miss something but what these lines are supposed to do:

print(isimsatırlistesi[0,"end"])

if len.isimsatırlistesi<0:
(May-04-2020, 10:11 AM)perfringo Wrote: [ -> ]Probably I miss something but what these lines are supposed to do:

print(isimsatırlistesi[0,"end"])

if len.isimsatırlistesi<0:

print(isimsatırlistesi[0,"end"]) this prints the list of isism satır listesi

if len.isimsatırlistesi<0: and this checks if number of elements in isim satır listesi is less than 0 it returns no string found message.
(May-03-2020, 10:08 PM)Sutsro Wrote: [ -> ]Hello Everyone,

I am trying to get the lines that contain test string or if its not found i want to print not found message. However this doesnt seem to work i dont get any messages at all.

I can read text file, i can even make it count with "for line in input:" however none of the if conditions work inside for indentation. Am i missing something ?



def verial():
  
    isimsatırlistesi=list()
    satırsayısı=0
    input = text1.get("1.0",'end-1c')
    for line in input:
        satırsayısı=satırsayısı+1
        if "test" in line:
            isimsatırlistesi.append(int(satırsayısı))
            print(isimsatırlistesi[0,"end"])
            if len.isimsatırlistesi<0:
                print("test not found")

I have already forked Python to have proper { } blocks and get rid of this fancy indentation rules. If there is anybody interested I can make my git become public or share the diff file. To be clear, the forked version can still continue to work on indented-style files, you can just decide every time you open a statement if you want to use the indent-style or { }.
block1 = """This is a bit
of text but
should pass completely
"""

block2 = """This bit of
text will be found
to be a real test of your patience
"""

for text_input in (block1, block2):
    line_count = 0
    for line_count, line in enumerate(text_input.splitlines(), start=1):
        if "test" in line:
            print(f"There were {line_count-1} lines before finding 'test'")
            break
    else:
        print(f"test not found")
Output:
test not found There were 2 lines before finding 'test'