Build a Pin Extractor - Step 17

Tell us what’s happening:

I don’t seem to be able to crack this step. Please, could you help me?

Your code so far


# User Editable Region

def pin_extractor(poems):
    secret_code = ''
    
    for poem in poems:
        lines = poem.split('\n')
        
        for line_index, line in enumerate(lines):
            words = line.split()
            
        if line_index < len(words):
            secret_code += str(len(words[line_index]))
        else:
            secret_code += '0'
    
    return secret_code


# User Editable Region

poem = """Stars and the moon
shine in the sky
white and
until the end of the night"""

poem2 = 'The grass is green\nhere and there\nhoping for rain\nbefore it turns yellow'
poem3 = 'There\nonce\nwas\na\ndragon'

# print(pin_extractor(poem))

Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36

Challenge Information:

Build a Pin Extractor - Step 17

Did you put all of the code in the body of the function inside the for loop?

1 Like

I did put the function inside the for loop. I am not sure what is wrong :frowning:

is this inside the loop?

what about this?

Would this be ok?



def pin_extractor(poems):

    for poem in poems:

        secret_code = ''

        lines = poem.split('\n')

        for line_index, line in enumerate(lines):

            words = line.split()

            if line_index < len(words):

                secret_code += str(len(words[line_index]))

            else:

                 secret_code += '0'

     return secret_code

isn’t this outside the loop?

Still not working (I set the return secret_code in the loop, but it doesn’t work).



def pin_extractor(poems):

    for poem in poems:

        secret_code = ''

        lines = poem.split('\n')

        for line_index, line in enumerate(lines):

            words = line.split()

            if line_index < len(words):

                secret_code += str(len(words[line_index]))

            else:

                 secret_code += '0'

             return secret_code

now it’s inside the other loop, instead of being only inside the new loop

I tried with the first loop, but it is not working either.

what is your updated code please?

I have tried with the following code, but it is not working:

def pin_extractor(poems):
    for poem in poems:
        secret_code = ''
        lines = poem.split('\n')
        for line_index, line in enumerate(lines):
            words = line.split()
            if line_index < len(words):
                secret_code += str(len(words[line_index]))
            else:
                 secret_code += '0'
        return secret_code
def pin_extractor(poems):
    for poem in poems:
        secret_code = ""
        lines = poem.split('\n')
        for line_index, line in enumerate(lines):
            words = line.split()
            if line_index > len(words):
                secret_code += str(len(words[line_index]))
            else:
                 secret_code += '0'
        return secret_code


poem = """Stars and the moon
shine in the sky
white and
until the end of the night"""

poem2 = 'The grass is green\nhere and there\nhoping for rain\nbefore it turns yellow'
poem3 = 'There\nonce\nwas\na\ndragon'

print(pin_extractor(poems))

It looks like you may have changed the starting code in areas you were not asked to change, which will cause the tests to fail. Please click the reset button to restore the original code and try again.

image

It is great that you solved the challenge, but instead of posting your full working solution, it is best to stay focused on answering the original poster’s question(s) and help guide them with hints and suggestions to solve their own issues with the challenge. How to Help Someone with Their Code Using the Socratic Method

We are trying to cut back on the number of spoiler solutions found on the forum and instead focus on helping other campers with their questions and definitely not posting full working solutions.

I haven’t solved this Step 17:

def pin_extractor(poems):
    for poem in poems:
        secret_code = ""
        lines = poem.split('\n')

        for line_index, line in enumerate(lines):
            words = line.split()

            if line_index < len(words):
                secret_code += str(len(words[line_index]))
            else:
                secret_code += '0'

        print(secret_code)
                 
poem = """Stars and the moon
shine in the sky
white and
until the end of the night"""

poem2 = 'The grass is green\nhere and there\nhoping for rain\nbefore it turns yellow'
poem3 = 'There\nonce\nwas\na\ndragon'

pin_extractor([poem, poem2, poem3])

It doesn’t look to me like you have reset this step to restore the starting code, which you changed. As mentioned earlier, a change to the starting code will break the tests.

I still cannot crack the code of Step 17:

def pin_extractor(poems):
    for poem in poems:
        secret_code = ""
        lines = poem.split('\n')
        
        for line_index, line in enumerate(lines):
            words = line.split()
        
            if line_index < len(words):
                secret_code += str(len(words[line_index]))
            else:
                secret_code += '0'

        return secret_code

poem = """Stars and the moon
shine in the sky
white and
until the end of the night"""

poem2 = 'The grass is green\nhere and there\nhoping for rain\nbefore it turns yellow'
poem3 = 'There\nonce\nwas\na\ndragon'

print (pin_extractor([poem, poem2, poem3]))

I still cannot crack step 17.

It tells me “You should move the existing body of the function into the new for loop.”

def pin_extractor(poems):
    for poem in poems:
        secret_code = ""
        lines = poem.split('\n')
        
        for line_index, line in enumerate(lines):
            words = line.split()
        
            if line_index < len(words):
                secret_code += str(len(words[line_index]))
            else:
                secret_code += '0'

        return secret_code

poem = """Stars and the moon
shine in the sky
white and
until the end of the night"""

poem2 = 'The grass is green\nhere and there\nhoping for rain\nbefore it turns yellow'
poem3 = 'There\nonce\nwas\na\ndragon'

print (pin_extractor([poem, poem2, poem3]))

as long as you have unexpected lines of code inside the function, the tests will fail, please use the reset button image to restore the starting code of this step, and add again the loop without changing any of the existing line (changing only their indentation)

Thank you so much! I could solve it :slight_smile: