Python Forum

Full Version: Trying to find first 2 letter word in a list of words
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello

I am trying to get this function working but cannot work out what is wrong. Any help will be gratefully received. My input is:

xs = ["this", "is", "a", "dead", "parrot"]

def find_first_2_letter_word(xs):
    for wd in xs:
        if len(wd) == 2:
            return wd
        return " "
    
print("The first 2 letter word is ", find_first_2_letter_word(xs))
My output is:
Output:
Python 3.8.4 (tags/v3.8.4:dfa645a, Jul 13 2020, 16:46:45) [MSC v.1924 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license()" for more information. >>> ================== RESTART: C:\Users\John\Desktop\testing1.py ================== The first 2 letter word is >>>
As can be seen the program prints the statement but fails to show the first 2 letter word.

Thank you
Hint: what happens on the first iteration of the for loop (i.e. when wd is "this")?
Hello ndc85430

I am trying to teach myself Python from How to Think Like a Computer Scientist so I must admit to being very much a tyro, please forgive my lack of knowledge. Now answering your hint I think that the first iteration passing over "this" produces a False and so the function should continue on to the second word in the list "is", which is a 2 letter word so the function should return True and stop iterating at that point and move to the print command outputting "The first 2 letter word is is". I still cannot see why the function does not do this.
Hi,

Quote:first iteration passing over "this" produces a False and so the function should continue on to the second word in the list "is",

This is not happening, hence the code does not work.

The following loop:
for wd in xs:
        if len(wd) == 2:
            return wd
        return " "
will not loop through the whole list simply because the code checks:
if len(wd) == 2:

- the condition is not met since ,,this,, is 4 characters long.

Therefore the code moves on to:
return " "
- this simply exits the for loop returning empty string " " and the code then moves on to:
print("The first 2 letter word is ", find_first_2_letter_word(xs))
You do not want to exit the loop after the first iteration :) Delete/comment out the line that makes the loop exit and the code should work.
Hint in more direct flavour: first word will return either word itself (if length is 2) or empty string. For-loop never reaches the second word. Remedy: move return of empty string out of for-loop.
Hello IntrOspective

Very helpful and informative thank you for your time and interest. I have learnt something there. I am using How to Think Like a Computer Scientist to teach myself Python and in that book they stated the function, including the 'return " "'. I find that quite misleading.

Thanks again
No worries,

Since you mentioned that the code comes from the book - i have just had a look at it again - in fact you can get the code working with ,,return " ",, too.

Have a look at the code in your book and see how exactly is ,,return " ", indented..
The way it was indented in your original code it was in fact part of the loop and hence causing trouble.

Therefore, the code in book is not necessarily misleading :)
Hello IntrOspective

I have only just seen this - thank you for your continued support.

I have looked in the book and it took me some time to spot it but you are correct, thank you.

I am really struggling to get my head around writing programmes with functions and now have had to seek help on my latest attempt in trying to compute a distance.

Never mind onwards it is.