题目
Move the first letter of each word to the end of it, then add “ay” to the end of the word. Leave punctuation marks untouched.
Examples
1 | pig_it('Pig latin is cool') |
思路
对字符串进程分割,得到一个字符串列表,然后再遍历列表,对每个字符串进行处理。同时考虑字符串的长度不同所需的处理方式不同。
答案
我的答案
1 | def pig_it(text): |
最佳答案
- 最佳实践解法
1
2
3def pig_it(text):
lst = text.split()
return ' '.join( [word[1:] + word[:1] + 'ay' if word.isalpha() else word for word in lst])
用了列表推导式,字符串的相关方法。另外,列表切片超出范围时,不会报错,而是返回空。这样就不再需要判断字符串长度的问题。
知识点
string.isalpha()()方法
检测字符串是否只由字母组成。
语法
1
str.isalpha()
返回值
如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False实例
1
2
3
4
5
6"123".isalpha()
False
"abc".isalpha()
True
"abc!".isalpha()
False类似方法
string.isalnum()
- 至少有一个字符并且所有字符都是字母或数字string.isdecimal()
- 只包含十进制数字string.isdigit()
- 只包含数字string.islower()
- 包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写string.isnumeric()
- 只包含数字字符string.isspace()
- 只包含空格string.istitle()
- 仅包含以大写字母开头、后面都是小写字母的单词。string.isupper()
- 至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写
string.split()方法
通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串
- 语法
1
str.split(str="", num=string.count(str))
str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num – 分割次数。默认情况下字符串按照各种空白字符分割, 诸如空格、 制表符或换行符。
返回值
分割后的字符串列表。实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16"I am liu hao" spam =
spam.split()
['I', 'am', 'liu', 'hao']
" ") spam.split(
['I', 'am', '', '', 'liu', '', '', 'hao']
"Chris_iven+Chris_jack+Chris_lusy".split("+")
['Chris_iven', 'Chris_jack', 'Chris_lusy']
"Chris_iven+Chris_jack+Chris_lusy".split("-")
['Chris_iven+Chris_jack+Chris_lusy']
"Chris_iven+Chris_jack+Chris_lusy".split("_")
['Chris', 'iven+Chris', 'jack+Chris', 'lusy']
"Chris_iven+Chris_jack+Chris_lusy".split("+",2)
['Chris_iven', 'Chris_jack', 'Chris_lusy']
"Chris_iven+Chris_jack+Chris_lusy".split("+",1)
['Chris_iven', 'Chris_jack+Chris_lusy']
string.join()方法
用于将序列中的元素以指定的字符连接生成一个新的字符串。
join()
方法是针对一个字符串而调用的,并且传入一个列表值(很容易不小心用其他的方式调用它)。split()
方法做的事情正好相反:它针对一个字符串调用,返回一个字符串列表。
- 语法
1
str.join(sequence)
sequence – 要连接的元素序列
返回值
返回通过指定字符连接序列中元素后生成的新字符串。实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14"-" str =
'a','b','c') seq = (
# 会为每一个元素添加一个指定字符,不会再最后的地方添加
str.join(seq)
'a-b-c'
'1','2','3']) str.join([
'1-2-3'
# 当连接字符串时,会自动将字符串分割
"abc") str.join(
'a-b-c'
"abc o o") str.join(
'a-b-c- -o- -o'
"123") str.join(
'1-2-3'