Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactored the "english translation" programs to be more consistent w…
…ith each other.
- Loading branch information
Showing
3 changed files
with
109 additions
and
81 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,56 +1,76 @@ | ||
# Pig Latin by Al Sweigart, al@inventwithpython.com | ||
# Translates English messages into Igpay Atinlay. | ||
|
||
print('IGPAY ATINLAY (pig latin)') | ||
print('By Al Sweigart al@inventwithpython.com') | ||
print() | ||
|
||
message = input('Enter your message> ') | ||
try: | ||
import pyperclip | ||
except ImportError: | ||
pass # It's not a big deal if pyperclip is not installed. | ||
|
||
VOWELS = ('a', 'e', 'i', 'o', 'u', 'y') | ||
|
||
pigLatin = [] # A list of the words in pig latin. | ||
for word in message.split(): | ||
# Separate the non-letters at the start of this word: | ||
prefixNonLetters = '' | ||
while len(word) > 0 and not word[0].isalpha(): | ||
prefixNonLetters += word[0] | ||
word = word[1:] | ||
if len(word) == 0: | ||
pigLatin.append(prefixNonLetters) | ||
continue | ||
|
||
# Separate the non-letters at the end of this word: | ||
suffixNonLetters = '' | ||
while not word[-1].isalpha(): | ||
suffixNonLetters += word[-1] | ||
word = word[:-1] | ||
|
||
# Remember if the word was in uppercase or titlecase. | ||
wasUpper = word.isupper() | ||
wasTitle = word.istitle() | ||
|
||
word = word.lower() # Make the word lowercase for translation. | ||
|
||
# Separate the consonants at the start of this word: | ||
prefixConsonants = '' | ||
while len(word) > 0 and not word[0] in VOWELS: | ||
prefixConsonants += word[0] | ||
word = word[1:] | ||
|
||
# Add the pig latin ending to the word: | ||
if prefixConsonants != '': | ||
word += prefixConsonants + 'ay' | ||
else: | ||
word += 'yay' | ||
|
||
# Set the word back to uppercase or titlecase: | ||
if wasUpper: | ||
word = word.upper() | ||
if wasTitle: | ||
word = word.title() | ||
|
||
# Add the non-letters back to the start or end of the word. | ||
pigLatin.append(prefixNonLetters + word + suffixNonLetters) | ||
|
||
# Join all the words back together into a single string: | ||
print(' '.join(pigLatin)) | ||
def englishToPigLatin(message): | ||
pigLatin = '' # A string of the pig latin translation. | ||
for word in message.split(): | ||
# Separate the non-letters at the start of this word: | ||
prefixNonLetters = '' | ||
while len(word) > 0 and not word[0].isalpha(): | ||
prefixNonLetters += word[0] | ||
word = word[1:] | ||
if len(word) == 0: | ||
pigLatin = pigLatin + prefixNonLetters + ' ' | ||
continue | ||
|
||
# Separate the non-letters at the end of this word: | ||
suffixNonLetters = '' | ||
while not word[-1].isalpha(): | ||
suffixNonLetters += word[-1] | ||
word = word[:-1] | ||
|
||
# Remember if the word was in uppercase or titlecase. | ||
wasUpper = word.isupper() | ||
wasTitle = word.istitle() | ||
|
||
word = word.lower() # Make the word lowercase for translation. | ||
|
||
# Separate the consonants at the start of this word: | ||
prefixConsonants = '' | ||
while len(word) > 0 and not word[0] in VOWELS: | ||
prefixConsonants += word[0] | ||
word = word[1:] | ||
|
||
# Add the pig latin ending to the word: | ||
if prefixConsonants != '': | ||
word += prefixConsonants + 'ay' | ||
else: | ||
word += 'yay' | ||
|
||
# Set the word back to uppercase or titlecase: | ||
if wasUpper: | ||
word = word.upper() | ||
if wasTitle: | ||
word = word.title() | ||
|
||
# Add the non-letters back to the start or end of the word. | ||
pigLatin = pigLatin + prefixNonLetters + word + suffixNonLetters + ' ' | ||
return pigLatin | ||
|
||
|
||
def main(): | ||
print('''IGPAY ATINLAY (Pig Latin) | ||
By Al Sweigart al@inventwithpython.com | ||
Enter your message:''') | ||
pigLatin = englishToPigLatin(input()) | ||
|
||
# Join all the words back together into a single string: | ||
print(pigLatin) | ||
|
||
try: | ||
pyperclip.copy(pigLatin) | ||
print('(Copied pig latin to clipboard.)') | ||
except NameError: | ||
pass # Do nothing if pyperclip wasn't installed. | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters