-
Notifications
You must be signed in to change notification settings - Fork 0
/
sampleproject1.py
79 lines (61 loc) · 2.37 KB
/
sampleproject1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
"""Pig Latin, by Al Sweigart al@inventwithpython.com
Translates English messages into Igpay Atinlay.
View this code at https://nostarch.com/big-book-small-python-projects
Tags: short, word"""
try:
import pyperclip # pyperclip copies text to the clipboard.
except ImportError:
pass # If pyperclip is not installed, do nothing. It's no big deal.
VOWELS = ('a', 'e', 'i', 'o', 'u', 'y')
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.
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] + suffixNonLetters
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 += prefixNonLetters + word + suffixNonLetters + ' '
return pigLatin
if __name__ == '__main__':
main()