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
- challenge find on edabit
Top comments (0)