Answer:
See explaination
Explanation:
#method to print menu & handle user choice
def print_menu(input_str):
#printing menu
print('MENU')
print('c - Number of non-whitespace characters')
print('w - Number of words')
print('f - Fix capitalization')
print('r - Replace punctuation')
print('s - Shorten spaces')
print('q - Quit\n')
#getting choice
choice=input('Choose an option: ').lower()
#identifying choice
if choice=='c':
#displaying number of non white space chars in input_str
print('Number of non-whitespace characters:',get_num_of_non_WS_characters(input_str))
elif choice=='w':
#displaying number of words in input_str
print('Number of words:',get_num_of_words(input_str))
elif choice=='f':
#fixing capitalization and getting updated string and count of values capitalized
input_str,count=fix_capilization(input_str)
#displaying results
print('Number of letters capitalized:',count)
print('Edited text:',input_str)
elif choice=='r':
#replacing punctuation, displaying updated text
input_str=replace_punctuation(input_str)
print('Edited text:', input_str)
elif choice=='s':
#shortening spaces and displaying updated text
input_str = shorten_space(input_str)
print('Edited text:', input_str)
#returning choice and input_str
return choice,input_str
#returns the number of non white space chars in input_str
def get_num_of_non_WS_characters(input_str):
count=0
#looping through each character in input_str
for i in input_str:
if not i.isspace():
#i is not a space
count+=1
return count
#returns the number of words in input_str
def get_num_of_words(input_str):
#splitting words into list of tokens by space
words=input_str.split(' ')
count=0
#counting all non empty strings in words list
for i in words:
if len(i)>0:
count+=1
return count
#method to fix capitalization and return updated string and count of letters updated
def fix_capilization(input_str):
count=0
beginning=True #starting letter should be capitalized
result=''
for i in input_str:
if beginning and i.isalpha():
#start of a sentence and i is alphabetic
if i.islower():
#converting i to upper case, incrementing count
i=i.upper()
count+=1
result+=i
#not start of a sentence
beginning=False
elif i in '?.!':
#i is either ? or . or !, next letter should be capitalized
beginning=True
result+=i
else:
#any other character
result+=i
return result,count
#method to replace exclamation and semicolons with period and comma respectively
def replace_punctuation(input_str,exclamationCount =0,semicolonCount=0):
result=''
for i in input_str:
if i=='!':
i='.'
exclamationCount+=1
elif i==';':
i=','
semicolonCount+=1
result+=i
print('Punctuation replaced')
#displaying replaced values counts
print('exclamationCount:',exclamationCount)
print('semicolonCount:',semicolonCount)
return result
#removes all double or more spaces in input_str
def shorten_space(input_str):
input_str=input_str.strip()
result=''
prev=None
for i in input_str:
if prev==None:
result+=i
elif i==' ':
if prev != ' ':
result+=i
else:
result+=i
prev=i
return result
if __name__ == '__main__':
#getting input, printing it
input_str=input('Enter a sample text:\n')
print('\nYou entered:',input_str)
choice=' '
#looping until choice becomes q
while choice!='q':
choice,input_str=print_menu(input_str)