【练习题】第八章--字符串(Think Python)

遍历的方法:

第一种是用while:

index = 0
while index < len(fruit):
    letter = fruit[index]
    print(letter)
    index = index + 1

第二种是用for:

prefixes = 'JKLMNOPQ'
suffix = 'ack'
for letter in prefixes:
    print(letter + suffix)

这个for的特性有点像C++11 里面的特性。

这个letter在此不为索引数字,而是遍历过程中所得的string。

字符串切片:

>>> s = 'Monty Python'
>>> s[0:5]
'Monty'
>>> s[6:12]
'Python'

[n:m]这种操作符,会返回字符串中从第『n』个到第『m』个的字符,包含开头的第『n』个,但不包含末尾的第『m』个。

如果你忽略了第一个索引(就是冒号前面的那个),切片会默认从字符串头部开始。如果你忽略了第二个索引,切片会一直包含到最后一位:

>>> fruit = 'banana'
>>> fruit[:3]
'ban'
>>> fruit[3:]
'ana'

如果两个索引相等,得到的就是空字符串了,用两个单引号来表示;如果是[:]则显示整个字符串:

>>> fruit = 'banana'
>>> fruit[3:3]
''
>>>fruit[:]
banana

字符串不可修改:

>>> greeting = 'Hello, world!'
>>> greeting[0] = 'J'
TypeError: 'str' object does not support item assignment

字符串方法:

word.upper()--全部小写变大写

word.find()--可查找字符、字符串、从指定位置查找..

运算符in:

in 这个词在字符串操作中是一个布尔操作符,它读取两个字符串,如果前者的字符串为后者所包含,就返回真,否则为假:

>>> 'a' in 'banana'
True
>>> 'seed' in 'banana'
False

练习1:

阅读 https://docs.python.org/2/library/stdtypes.html?highlight=strip#str.strip关于字符串的文档。你也许会想要试试其中一些方法,来确保你理解它们的意义。比如 strip 和 replace 都特别有用。

文档的语法有可能不太好理解。比如在find 这个方法中,方括号表示了可选参数。所以 sub 是必须的参数,但 start 是可选的,如果你包含了 start,end 就是可选的了。

strip([char]):裁剪函数,用于裁剪前后字符。

str.strip([char]):以char内的作为关键字,同时从左往右、从右往左开始检测str里的关键字,一经检测到,立即删除,直至遇到非关键字才会停下。若char省略掉或为空,则默认为关键字为“空格”。

例:print('www.examples.com'.strip('mcw'))

answer:runfile('C:/Users/Lenovo/.spyder/temp.py', wdir='C:/Users/Lenovo/.spyder')
.examples.co

replace(old,new[,count]):替换函数。

str.replace(old,new[,count])

例:print('www.examples.com'.replace('w','a',2))

answer:aaw.examples.com

print('www.examples.com'.replace('w','a'))

answer:aaa.examples.com

练习2:

字符串有个方法叫 count,与咱们在8.7中写的 count 函数很相似。 阅读一下这个方法的文档,然后写一个调用这个方法的代码,统计一下 banana 这个单词中 a 出现的次数 。

例:print('www.examples.com'.count('w',0,2))------这个字符串切片同样:包含首不包含尾。

answer:2

print('www.examples.com'.count('w'))

answer:3

练习3:

字符串切片可以使用第三个索引,作为步长来使用;步长的意思就是取字符的间距。一个步长为2的意思就是每隔一个取一个字符;3的意思就是每次取第三个,以此类推。

>>> fruit = 'banana'
>>> fruit[0:5:2]
'bnn'

步长如果为-1,意思就是倒序读取字符串,所以[::-1]这个切片就会生成一个逆序的字符串了。

练习5:

凯撒密码是一种简单的加密方法,用的方法是把每个字母进行特定数量的移位。对一个字母移位就是把它根据字母表的顺序来增减对应,如果到末尾位数不够就从开头算剩余的位数,『A』移位3就是『D』,而『Z』移位1就是『A』了。

要对一个词进行移位,要把每个字母都移动同样的数量。比如『cheer』这个单词移位7就是『jolly』,而『melon』移位-10就是『cubed』。在电影《2001 太空漫游》中,飞船的电脑叫 HAL,就是 IBM 移位-1。

写一个名叫 rotate_word 的函数,接收一个字符串和一个整形为参数,返回将源字符串移位该整数位得到的新字符串。

你也许会用得上内置函数 ord,它把字符转换成数值代码,然后还有个 chr 是用来把数值代码转换成字符。字母表中的字母都被编译成跟字母表中同样的顺序了,所以如下所示:

>>> ord('c') - ord('a')
2

c 是字母表中的第『2』个(译者注:从0开始数哈)的位置,所以上述结果是2。但注意:大写字母的数值代码是和小写的不一样的。

code:

def rotate_letter(letter,n):
    if letter.isupper():
        start=ord('A')
    elif letter.islower():
        start=ord('a')
    elif letter.isdigit():
        return chr(ord(letter)+n)
    else:
        letter
    c=ord(letter)-start
    i=(n+c)%26+start
    return chr(i)
def rotate_word(s,n):
    res = ''
    for letter in s:
        res += rotate_letter(letter, n)
    return res

print(rotate_word('a1z',1))

猜你喜欢

转载自blog.csdn.net/qq_29567851/article/details/83063617