Python Exercise 13: Scottish Screaming

Table of Contents

Question

  • write a program to transform a speech to a strong Scottish accent

  • a strong Scottish accent makes every vowel similar to an "e",

    • so you should replace every vowel with an "e".
  • Additionally, it is being screamed, so it should be in block capitals.

  • Create a function that takes a string and returns a string.

example

to_scottish_screaming("hello world") ➞ "HELLE WERLD"

to_scottish_screaming("Mr. Fox was very naughty") ➞ "MR. FEX WES VERY NEEGHTY"

to_scottish_screaming("Butterflies are beautiful!") ➞ "BETTERFLEES ERE BEEETEFEL!"

My attempt

Fail attempt

  • algorithm
>Turn a sentence to Scottish accent
>>replace all the vowel in the string with e and capitalise the whole sentence
>>>find every vowel in the string 
   set up a vowel list
   for every letter equals to one of the vowel list it is a vowel
>>>replace the vowel e
>>>capitalise the string
  • code
def to_scottish_screaming(string: str):  
    vowel_list = ["a", "e", "i", "o", "u"]  
    string = string.lower()  
    for letter in string:  
        if letter in vowel_list:  
            scottish_scraming = string.replace(letter, "e")  
    scottish_scraming = scottish_scraming.upper()  
    return scottish_scraming
  • This fail as the scottish_scraming only replace one letter when updated.

Attempt 2 (success)

  • algorithm
    >Turn a sentence to Scottish accent
    >>replace all the vowel in the string with e and capitalise the whole sentence
    >>>find every vowel in the string
    initialise a vowel list
    check the letter in the string one by one
    if the letter is exist in the vowel list, then it is vowel
    >>>replace the vowel with e and add to a new string
    initialise an empty string
    if the letter is a vowel, add "e" to the new string at same position
    otherwise, add the original letter to the new string at same position
    >>>capitalise the new string
    call upper() method on the string
    >>>print out the result
  • code
def to_scottish_screaming(string: str):  
    string = string.lower()  
    vowel_list = ["a", "e", "i", "o", "u"]  
    scottish_scraming = str()  
    for letter in string:  
        scottish_scraming += "e" if letter in vowel_list else letter  
    scottish_scraming = scottish_scraming.upper()  
    return scottish_scraming  

print(to_scottish_screaming("A, wonderful, day, don't, you, think?"))

Other solution

use re.sub() method

  • the first argument is pattern or string
  • the [] is used to indicate a set of characters,
    • so AIOU can be list individually,
    • AIOU will become "A", "I", "O", "U"
    • i.e. replace "A", "I", "O", "U" with 'E' in the upper-cased of the string
import re  

def to_scottish_screaming(string: str):  
    scottish_scraming = re.sub("[AIOU]", "E", string.upper())  
    return scottish_scraming

My reflection

  • just keep praticing writing algorithm first to solve proble, a bit more familiar to work in this way.
  • re.sub() method is much simple in replace characters in a string, I should remember next time.

Credit

Leave a Reply