Skip to main content

Exercises 11.6 Exercises

1.

Write a program that allows the user to enter a string. It then prints a table of the letters of the alphabet in alphabetical order which occur in the string together with the number of times each letter occurs. Case should be ignored. A sample run of the program might look this this:
Please enter a sentence: ThiS is String with Upper and lower case Letters.
a  2
c  1
d  1
e  5
g  1
h  2
i  4
l  2
n  2
o  1
p  2
r  4
s  5
t  5
u  1
w  2
$
Solution.
sentence = input("Enter a sentence: ")

sentence = sentence.lower()   # convert to all lowercase

alphabet = 'abcdefghijklmnopqrstuvwxyz'

letter_count = {} # empty dictionary
for char in sentence:
    if char in alphabet: # ignore any punctuation, numbers, etc
        if char in letter_count:
            letter_count[char] = letter_count[char] + 1
        else:
            letter_count[char] = 1

keys = letter_count.keys()
for char in sorted(keys):
    print(char, letter_count[char])
Give the Python interpreter’s response to each of the following from a continuous interpreter session:
  1. >>> d = {'apples': 15, 'bananas': 35, 'grapes': 12}
    >>> d['banana']
    
  2. >>> d['oranges'] = 20
    >>> len(d)
    
  3. >>> 'grapes' in d
    
  4. >>> d['pears']
    
  5. >>> d.get('pears', 0)
    
  6. >>> fruits = d.keys()
    >>> fruits.sort()
    >>> print(fruits)
    
  7. >>> del d['apples']
    >>> 'apples' in d
    
Be sure you understand why you get each result. Then apply what you have learned to fill in the body of the function below, and add code for the tests indicated:

2.

Write a program called alice_words.py that creates a text file named alice_words.txt containing an alphabetical listing of all the words, and the number of times each occurs, in the text version of Alice’s Adventures in Wonderland. (You can obtain a free plain text version of the book, along with many others, from http://www.gutenberg.org 1 .) The first 10 lines of your output file should look something like this. (The counts may not be the same, depending on which version of the book you have downloaded.)
Table 11.6.1.
Word Count
a 631
a-piece 1
abide 1
able 1
about 94
above 3
absence 1
absurd 2
How many times does the word alice occur in the book? If you are writing this in the activecode window simply print out the results rather than write them to a file.
Solution.
book_file = open('alice.txt', 'r')

# key is word, value is number of times it appears
count = {}

for line in book_file:
    for word in line.split():

        # ignore case
        word = word.lower()
        
        # keep only alphabetic chars
        alpha_word = ""
        for ch in word:
            if ch.isalpha():
                alpha_word += ch

        # use only words with content in them
        if alpha_word != '':
            if  alpha_word in count:
                count[alpha_word] = count[alpha_word] + 1
            else:
                count[alpha_word] = 1

# Get the keys of the dictionary and convert to list
key_list = list(count.keys())

key_list.sort()

# save the word count analysis to a file
out = open('alice_words.txt', 'w')

for word in key_list:
    out.write(word + " " + str(count[word]))
    out.write('\n')

print("The word 'alice' appears " + str(count['alice']) + " times in the book.")

3.

What is the longest word in Alice in Wonderland? How many characters does it have?

4.

Here’s a table of English to Pirate translations
Table 11.6.2.
English Pirate
sir matey
hotel fleabag inn
student swabbie
boy matey
madam proud beauty
professor foul blaggard
restaurant galley
your yer
excuse arr
students swabbies
are be
lawyer bilge rat
the th’
restroom head
my me
hello avast
is be
man matey
Write a function named translator that takes a parameter containing a sentence in English (no punctuation and all words in lowercase) and returns that sentence translated to Pirate.
For example, the sentence “hello there students” should be translated to “avast there swabbies”.
Solution.
def translator(sentence):

  pirate = {}
  pirate['sir'] = 'matey'
  pirate['hotel'] = 'fleabag inn'
  pirate['student'] = 'swabbie'
  pirate['boy'] = 'matey'
  pirate['restaurant'] = 'galley'
  pirate['hello'] = 'avast'
  pirate['students'] = 'swabbies'

  psentence = []
  words = sentence.split()
  for aword in words:
     if aword in pirate:
         psentence.append(pirate[aword])
     else:
         psentence.append(aword)

  return " ".join(psentence)
http://www.gutenberg.org