Python Forum
Trying to find first 2 letter word in a list of words
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Trying to find first 2 letter word in a list of words
#1
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
Reply
#2
Hint: what happens on the first iteration of the for loop (i.e. when wd is "this")?
Reply
#3
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.
Reply
#4
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.
Reply
#5
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.
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply
#6
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
Reply
#7
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 :)
Reply
#8
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.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  find and group similar words with re? cartonics 4 682 Oct-27-2023, 05:36 PM
Last Post: deanhystad
  Program to find Mode of a list PythonBoy 6 997 Sep-12-2023, 09:31 AM
Last Post: PythonBoy
  Function to count words in a list up to and including Sam Oldman45 15 6,407 Sep-08-2023, 01:10 PM
Last Post: Pedroski55
  find random numbers that are = to the first 2 number of a list. Frankduc 23 3,013 Apr-05-2023, 07:36 PM
Last Post: Frankduc
  Working with Excel and Word, Several Questions Regarding Find and Replace Brandon_Pickert 4 1,492 Feb-11-2023, 03:59 PM
Last Post: Brandon_Pickert
  Find (each) element from a list in a file tester_V 3 1,155 Nov-15-2022, 08:40 PM
Last Post: tester_V
  read a text file, find all integers, append to list oldtrafford 12 3,369 Aug-11-2022, 08:23 AM
Last Post: Pedroski55
  For Word, Count in List (Counts.Items()) new_coder_231013 6 2,497 Jul-21-2022, 02:51 PM
Last Post: new_coder_231013
  find some word in text list file and a bit change to them RolanRoll 3 1,482 Jun-27-2022, 01:36 AM
Last Post: RolanRoll
  How to find the second lowest element in the list? Anonymous 3 1,903 May-31-2022, 01:58 PM
Last Post: Larz60+

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020