提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
Pig Latin 是一种傻傻的,有些可爱的语言,在学习这个小程序时,使我重新感受到了古典密码学的魅力——无论加密方法如何变迁,“置换”和“代换”的思想总是这座金字塔的基石。而Pig Latin的语言,正是和“置换”密码有着异曲同工之妙。
提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是Pig Latin ?
Pig Latin 会改变消息的顺序,以特定的语法输出:
当一个单词以元音字母(aeiouy)开头,就会在末尾添加yay;当一个单词以辅音字母或者辅音簇(如ch,gr)开头,该辅音就会移动到末尾,并加上ay。
二、思路
1.用input函数输入要翻译的消息
2.要针对消息中的每一个单词进行处理,用strip方法将消息分割成列表
3.处理单词:
处理什么 | 怎么处理 |
---|---|
(1)单词开头和结尾的非字符 | 从原单词中删除,用prefixNonLetter和postfixNonLetter变量暂存 |
(2)非单词 | 直接放入存储处理完成的单词的列表中 |
(3.)转化为全小写,方便判断首字母是否为元音 | 使用lower 方法,但在转化前要事先记忆原单词是全大写还是首字母大写 |
(4). 单词开头的辅音和辅音簇 | 从原单词中删除,用prefixConsonant变量暂存 |
(5). 转化为pig latin格式 | 根据是否开头为元音字母,修改格式,决定是否在末尾加上prefixConsonant. 最后恢复原单词大小写格式,同时添加前后非字母字符 |
6.将修改好的单词列表重新组合
三、代码
'''该程序的目的在于,将输入的消息(message),以Pig Latin语法(加密)输出'''
#输入消息
message = input("Please input a message, then you will get one that has pig latin style:\n ")
#将消息切分成为单词列表
words = message.split()
pig_latins = []
#对每个单词检查格式,转换
for word in words:
#检查单词开头是否有非字母
prefixNonLetter = ""
while len(word) > 0 and not word[0].isalpha():
prefixNonLetter += word[0]
word = word[1:]
#若不是单词,例如1_000
if len(word) == 0:
pig_latins.append(prefixNonLetter)
continue
#检查单词末尾是否有非字母
postfixNonLetter = ""
while not word[-1].isalpha():
postfixNonLetter += word[-1]
word = word[:-1]
#记录是否为全大写,或者首字符大写
wasUpper = word.isupper()
wasTitle = word.istitle()
#调整顺序,添加字符,使之为pig latin 类型
voval = ('a', 'e', 'i', 'o', 'u', 'y')
word = word.lower()
prefixConsonant = ""
while len(word) > 0 and not word[0] in voval:
prefixConsonant += word[0]
word = word[1:]
#若为元音,加yay,若为辅音,添加到末尾,再加ay
if len(prefixConsonant) == 0:
word += "yay"
else:
word = word + prefixConsonant + 'ay'
#回复原先全大写 或者 首字母大写的格式
if wasTitle:
word = word.title()
if wasUpper:
word = word.upper()
#重新添加上首尾的非字符
word = prefixNonLetter + word + postfixNonLetter
pig_latins.append(word)
#将被打散的单词拼接,组成新的pig latin 句子
pig_latin = ' '.join(pig_latins)
print(pig_latin)
总结
非常简单的小代码,练习字符串及其方法使用,感谢捧场,加油,自己。