《Think Python 2e》作业实现(八): 字符串

《Think Python 2e》作业实现(八): 字符串



这是什么?

这里是《Think Python 2e》作业实现 !在这里将记录《Think Python 2e》作业的练习记录、终端信息和结果分析。

  • 这是《Think Python 2e》哪个版本的作业?
    《Think Python:如何像计算机科学家一样思考》第二版。这里主要参考了一个中文网页版《Think Python 2e》中译本
  • 可以当成《Think Python 2e》参考答案吗?
    这里主要记录了我自己完成作业时所产生的成果及习题总结,基本未参考教材所提供的答案,未免有失规范,参考答案建议还是以 绿茶出版社官方代码 为准。
  • 不同的解释器版本结果不尽相同,这里用的哪个版本Python解释器?
    这里用了Python 3.8.6版解释器,部分用安卓Pydroid 4.01_arm64中的3.8.3版Python解释器,在线解释器用教程推荐的PythonAnywhere中的3.8版Python解释器。

习题8-1:字符串 strip 和 replace 方法

【习题 】 点击如下链接,阅读字符串方法的文档 http://docs.python.org/3/library/stdtypes.html#string-methods ,为了确保理解他们是怎么工作的,可以尝试使用其中的一些方法,strip 和 replace 尤其有用

  • 练习记录:
>>> 'www.example.com'.strip('cmowz.')
'example'
>>> '   spacious   '.strip()
'spacious'
>>> 'www.example.com'.strip('cmowz.')
'example'
>>> 'banana'.replace('a', 'e', 2)
'benena'

习题8-2:字符串 count 方法

【习题 】 字符串方法 count 类似于之前循环和计数一节中的 counter ,阅读这个方法的文档,写一个计算 banana 中 a 的个数的方法调用

  • 练习记录:
>>> 'banana'.count('a')
3
>>> 'banana'.count('na')
2

习题8-3:生成倒序字符串检查回文字

【习题 】 一个字符串切片可以接受指定步长的第三个索引,也就是连续字符间空格的个数,步长为2,意味着每隔一个字符,步长为3,意味着每隔两个字符,以此类推,步长为-1就是从单词的尾部开始进行, 所以切片 [::-1] 生成一个倒序的字符串,利用这个惯用法(idiom),将习题6-3中 is_palindrome 函数改写为一行代码版

  • 练习记录:
def is_palindrome(word):
	if word[::-1] == word:
		return True
	return False
	
print(is_palindrome('wow'))
print(is_palindrome('wowo'))
PS C:\Users\Administrator> python D:\WorkSpace\thinkpython2e\8_3.py
True
False

习题8-4:这些函数都做了什么

【习题 】 下面这些函数,都是用于检查一个字符串是否包含一些小写字母的,但是其中至少有一些是错误的函数,检查每个函数,描述这个函数实际上做了什么(假设形参是字符串)

  • 练习记录:
def any_lowercase1(s):
	"""返回的结果是字符串第一个字符小写与否
	"""
	for c in s:
		if c.islower():
			return True
		else:
			return False
	
def any_lowercase2(s):
	"""返回的结果是'c'这个字符小写与否
	"""
	for c in s:
		if 'c'.islower():
			return 'True'
		else:
			return 'False'

def any_lowercase3(s):
	"""返回的结果是字符串最后一个字符小写与否
	"""
	for c in s:
		flag = c.islower()
	return flag

def any_lowercase4(s):
	"""返回的结果是字符串有小写字符与否
	"""
	flag = False
	for c in s:
		flag = flag or c.islower()
	return flag

def any_lowercase5(s):
	"""返回的结果是字符串全部字符小写与否
	"""
	for c in s:
		if not c.islower():
			return False
	return True

习题8-5:使得字符串整体偏移

【习题 】 编写一个叫 rotate_word 的函数,接受一个字符串和一个整数作为形参,并返回原字符串按照给定整数量偏移后得到的一个新字符串

  • 练习记录:
def rotate_letter(letter, n):
    if letter.isupper():
        start = ord('A')
    elif letter.islower():
        start = ord('a')
    else:
        return letter

    c = ord(letter) - start
    i = (c + n) % 26 + start
    return chr(i)


def rotate_word(word, n):
    res = ''
    for letter in word:
        res += rotate_letter(letter, n)
    return res
    
print(rotate_word('cheer', 7))
print(rotate_word('melon', -10))
print(rotate_word('sleep', 9))
PS C:\Users\Administrator> python D:\WorkSpace\thinkpython2e\rotate.py
jolly
cubed
bunny
  • 结果分析:

    • 内置函数 ord 可以将字符转化成数值代码,chr 可以将数值代码转化成字符,字母表的字母以字母表顺序编码
    >>> ord('a')
    97
    >>> chr(99)
    'c'
    
    • 字符串的 isupper(islower) 方法,如果字符串全部是大写字母(小写字母)返回 True,否则返回 False
    >>> 'word'.islower()
    True
    >>> 'worD'.isupper()
    False
    

猜你喜欢

转载自blog.csdn.net/weixin_41217917/article/details/112916686