Answer:
alphabet = "abcdefghijklmnopqrstuvwxyz"
test_dups = ["zzz","dog","bookkeeper","subdermatoglyphic","subdermatoglyphics"]
test_miss = ["zzz","subdermatoglyphic","the quick brown fox jumps over the lazy dog"]
# From Section 11.2 of: # Downey, A. (2015). Think Python: How to think like a computer scientist. Needham, Massachusetts: Green Tree Press.
def histogram(s):
d = dict()
for c in s:
if c not in d:
d[c] = 1
else:
d[c] += 1
return d
#Part 1 Write a function called has_duplicates that takes a string parameter and returns True if the string has any repeated characters. Otherwise, it should return False.
def has_duplicates(stringP):
dic = histogram(stringP)
for key,value in dic.items():
if value>1:
return True
return False
# Implement has_duplicates by creating a histogram using the histogram function above. Write a loop over the strings in the provided test_dups list.
# Print each string in the list and whether or not it has any duplicates based on the return value of has_duplicates for that string.
# For example, the output for "aaa" and "abc" would be the following. aaa has duplicates abc has no duplicates Print a line like one of the above for each of the strings in test_dups.
print("***Implementation of has_duplicates fuction***")
for sTr in test_dups:
if has_duplicates(sTr):
print(sTr+": has duplicates")
else:
print(sTr+": has no duplicates")
#Part 2 Write a function called missing_letters that takes a string parameter and returns a new string with all the letters of the alphabet that are not in the argument string.
#The letters in the returned string should be in alphabetical order. Your implementation should use a histogram from the histogram function. It should also use the global variable alphabet.
#It should use this global variable directly, not through an argument or a local copy. It should loop over the letters in alphabet to determine which are missing from the input parameter.
#The function missing_letters should combine the list of missing letters into a string and return that string.
def missing_letters(sTr):
missingLettersList = []
dic = histogram(sTr)
for l in alphabet:
if l not in dic:
missingLettersList.append(l)
missingLettersList.sort()
return "".join(missingLettersList)
#Write a loop over the strings in list test_miss and call missing_letters with each string. Print a line for each string listing the missing letters.
#For example, for the string "aaa", the output should be the following. aaa is missing letters bcdefghijklmnopqrstuvwxyz
#If the string has all the letters in alphabet, the output should say it uses all the letters.
#For example, the output for the string alphabet itself would be the following. abcdefghijklmnopqrstuvwxyz uses all the letters
#Print a line like one of the above for each of the strings in test_miss.
print("\n***Implementation of missing_letters fuction***")
for lTm in test_miss:
sTr = missing_letters(lTm.replace(" ",""))
if sTr!="":
print(lTm+" is missing letters "+sTr)
else:
print(lTm +" uses all the letters")