Dec-13-2020, 12:57 AM
I am working my way through Reuven Lerner's book Python Workout (great book!).
On page 86 is a program to find the longest words.
I have 10 books from gutenberg.org as text files.
I changed the find_longest_word function so it would not return web addresses and other things as long words.
If I put : after the for loop declaration, then I get an error!
On page 86 is a program to find the longest words.
I have 10 books from gutenberg.org as text files.
I changed the find_longest_word function so it would not return web addresses and other things as long words.
def find_longest_word(filename):
def fakeWords(word):
notWanted = ['/', '_', '-', '—', '(', '@', 'www', '—', '"', 'ï', '»']
for sign in notWanted:
if sign in word:
return True
# first the longest word is empty
longest_word = ''
# check each line 1 line at a time
for one_line in open(filename):
# check each word for length
for one_word in one_line.split():
if fakeWords(one_word):
continue
else:
word = one_word.replace('"', '').replace(',', '').replace('.', '').replace('”', '')
if len(word) > len(longest_word):
longest_word = word
return longest_wordThe part that puzzles me is this main function (apparently this is called a dictionary comprehension):# this works great, about 5 seconds for 10 books!
def find_all_longest_words(dirname):
return {filename:
find_longest_word(os.path.join(dirname, filename))
for filename in os.listdir(dirname)
if os.path.isfile(os.path.join(dirname, filename))}Why doesn't the for loop, without : and no indent throw an error??If I put : after the for loop declaration, then I get an error!
