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.