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.
x = input("Enter a sentence")
x = x.lower() # convert to all lowercase
alphabet = 'abcdefghijklmnopqrstuvwxyz'
letter_count = {} # empty dictionary
for char in x:
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:
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
http://www.gutenberg.org
.) The first 10 lines of your output file should look something like this
Table12.7.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.
f = open('alice.txt', 'r')
count = {}
for line in f:
for word in line.split():
# remove punctuation
word = word.replace('_', '').replace('"', '').replace(',', '').replace('.', '')
word = word.replace('-', '').replace('?', '').replace('!', '').replace("'", "")
word = word.replace('(', '').replace(')', '').replace(':', '').replace('[', '')
word = word.replace(']', '').replace(';', '')
# ignore case
word = word.lower()
# ignore numbers
if word.isalpha():
if word in count:
count[word] = count[word] + 1
else:
count[word] = 1
keys = count.keys()
keys.sort()
# save the word count analysis to a file
out = open('alice_words.txt', 'w')
for word in keys:
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
Table12.7.2.
English
Pirate
sir
matey
hotel
fleabag inn
student
swabbie
boy
matey
madam
proud beauty
professor
foul blaggart
restaurant
galley
your
yer
excuse
arr
students
swabbies
are
be
lawyer
foul blaggart
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)