Files

67 lines
2.1 KiB
Python

VOWELS: list = [
"a",
"A",
"e",
"E",
"i",
"I",
"o",
"O",
"u",
"U",
]
# commenting out this list since its not being used
# CONSONANTS: list = [
# letter for letter in range(ord("A"), ord("Z") + 1) if letter not in VOWELS
# ]
XR_YT: tuple = (
"xr",
"Xr",
"XR",
"xR",
"yt",
"Yt",
"YT",
"yT",
)
# NOTE: this could be easier if used with match pattern (re module) but for
# now lets leave this way. can be used later for refactoring
def translate(text):
# list with words translated
pig_latin_text: list = []
for word in text.split():
# rule one - starts with vowel or xt/yt
if word.startswith(tuple(VOWELS)) or word.startswith(XR_YT):
pig_latin_text.append(word + "ay")
else:
# rules 2, 3 and 4 starts with consonant, so lets treat them here
consonants_at_start: str = "" # string with grabbed consonants
for index, letter in enumerate(word):
# letter is not a vowel, lets find if rules 3 or 4 applies
if letter not in VOWELS:
# check rule 4
if letter == "y" and index != 0:
pig_latin_text.append(word[index:] + word[:index] + "ay")
break
# special case of rule 3, when word starts with 'qu'
if word.startswith("qu"):
pig_latin_text.append(word[2:] + word[:2] + "ay")
break
# general case of rule 3, where 'qu' its precessed with only consonants
if word[index + 1 : index + 3] == "qu":
pig_latin_text.append(
word[index + 3 :] + word[: index + 3] + "ay"
)
break
consonants_at_start += letter
else:
# letter is a vowel, so lets apply rule 2
pig_latin_text.append(word[index:] + consonants_at_start + "ay")
break
return " ".join(pig_latin_text)