第七章 异常、模块和包 课后练习题

目录

1. 实现自己的数学模块mymath,提供有4个函数,分别为加减乘除,在B模块中调用A模块的函数。

2. 实现自己的字符串模块mystr,里面有方法:isdigit,strip, join,split

3. 构建一个模块的层级包

4. 实现一个除法函数,并处理异常

5. 引发一个异常,并将它抛除到上层函数,上层函数捕获该异常并处理

6. 实现字符串、列表、元组和set之间互相转换

7. 结合set对象,统计某个list出现的重复元素个数

8. 定义一个元组,向元组中添加元素或者修改已有元素,并捕获异常

9. 删除无重复元组中给定的元素,并生成一个新元组

10.有一个ip.txt,里面每行是一个ip,实现一个函数,ping 每个ip的结果,把结果记录存到ping.txt中,格式为ip:0或ip:1 ,0代表ping成功,1代表ping失败

11.实现DOS命令执行功能,接受输入命令并执行,然后把执行结果打印到屏幕

12.求一个n*n矩阵对角线元素之和

13. 输入一个数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组

14. 平衡点,一个数组,有一个数字左边所有的数字加起来的总和等于这个数右边所有数字的总和,请输出这个数以及坐标

15. 将单词表中由相同字母组成的单词归成一类,每类单词按照单词的首字母排序,并按每类中第一个单词字典序由大到小排列输出各个类别。

16.输入一个数组,实现一个函数,让所有奇数都在偶数前面

17.lista=['a','abc','d','abc','fgi','abf'],寻找列表中出现次数最多的第一个字母,出现了几次

18.请输入星期几的前两个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母

19.有一堆100块的石头,2个人轮流随机从中取1-5块,谁取最后一块就谁win,编程实现此过程

20.实现一个方法,判断一个正整数是否是2的乘方,比如16是2的4次方,返回True;18不是2的乘方,返回False。要求性能尽可能高


1. 实现自己的数学模块mymath,提供有4个函数,分别为加减乘除,在B模块中调用A模块的函数。

# mymath.py
def add(a,b):
	return a + b

def sub(a,b):
	return a - b
	
def mul(a,b):
	return a * b

def div(a,b):
	return a / b

# p7-1-b.py
import mymath
print(mymath.add(3,5))
print(mymath.sub(12,7))
print(mymath.mul(4,8))
print(mymath.div(100,5))

 

2. 实现自己的字符串模块mystr,里面有方法:isdigit,strip, join,split

import string
from collections.abc import Iterable

def isdigit(s):
	if not isinstance(s,str):
		return False
	for i in s:
		if i not in "0123456789":
			return False
	return True


def strip(s,chars=string.whitespace):
	if not isinstance(s,str) or not isinstance(chars,str):
		return
	s_len = len(s)
	for i in range(s_len):
		if s[i] not in chars:
			result = s[i:]
			break
	for j in range(-1,-s_len-1,-1):
		if s[j] not in chars:
			result = result[:j+1]
			break
	return result


def join(s,chars=""):
	if not isinstance(s,Iterable) or not isinstance(chars,str):
		return
	result = ""
	s_len = len(s)
	for i in range(s_len):
		if not isinstance(s[i],str):
			return
		if i != s_len - 1:
			result += s[i] + chars
		else:
			result += s[i]
	return result


def split(s,sep=string.whitespace,maxsplit=-1):
	if not isinstance(s,str) or not isinstance(sep,str):
		return
	if maxsplit == 0:
		return [s]
	result=[]
	index=0
	s_len = len(s)
	if sep == string.whitespace:
		if maxsplit == -1:
			times = 0
			for i in s:
				if i in sep:
					times += 1
			maxsplit = times #这样统计到的maxplit值,在sep = string.whitespace,maxsplit>0时,替换有问题
		while maxsplit > 0:
			tmp = ""
			for i in range(index,s_len):
				if s[i] not in sep:
					tmp += s[i]
					index += 1
				else:
					index += 1
					break
			if tmp:
				result.append(tmp)
			maxsplit -= 1
		if s[index:]:
			result.append(s[index:])
	else:
		sep_len = len(sep)
		if maxsplit == -1:
			maxsplit = s.count(sep)
		while maxsplit > 0:
			tmp = ""
			for i in range(index,s_len):
				if s[i:i+sep_len] != sep:
					tmp += s[i]
					index += 1
				else:
					index += sep_len
					break
			result.append(tmp)
			maxsplit -= 1
		result.append(s[index:])
	return result


if __name__ == "__main__":
	# print(isdigit("1234"))
	# print(isdigit("12aa34"))
	# print(strip("\r\t\n ab cd   \x0b\x0c"))
	# print(strip("   xyz   "))
	# print(strip("***ab rt****","*"))
	# print(join(["a","b","c"]))
	# print(join(["a","b","c"],"."))
	print(split("hello \n\t    world \r hi china   "))
	print(split("hello \n\t    world \r hi china   ",maxsplit=2)) # 与标准函数结果不一致,标准函数结果为:['hello', 'world', 'hi china   ']
	print(split("aa***b**cd*E*","*"))
	print(split("aa***b**cd*E*","*",0))
	print(split("aa***b**cd*E","*",2))
	print(split("aa***b**cd*E","**"))

3. 构建一个模块的层级包

4. 实现一个除法函数,并处理异常

def div(a,b):
	try:
		return a/b
	except ZeroDivisionError as e:
		return e
	except Exception as e:
		return e

print(div(3,0))
print(div(3,2))

5. 引发一个异常,并将它抛除到上层函数,上层函数捕获该异常并处理

def top_func(a,b):
	try:
		result = down_func(a,b)
	except Exception as e:
		print(e)
	else:
		print(result)

def down_func(a,b):
	return a / b

top_func(5,0)
top_func(5,2)

6. 实现字符串、列表、元组和set之间互相转换

 

# 字符串转列表、元组、set
s="abcddb"
ls = list(s)
print("str to list:",ls)
ts=tuple(s)
print("str to tuple:",ts)
ss = set(s)
print("str to set:",ss)

# 列表转字符串、元组、set
l=[1,2,3,4,3,2,2]
str_l = ""
for i in l:
	str_l += str(i)
print("list to str:",str_l)
tuple_l = tuple(l)
print("list to tuple:",tuple_l)
set_l = set(l)
print("list to set:",set_l)

# 元组转字符串、列表、set
t=(1,2,3,3,2,4,1)
str_t = ""
for i in t:
	str_t += str(i)
print("tuple to str:",str_t)
list_t = list(l)
print("tuple to list:",list_t)
set_t = set(t)
print("tuple to set:",set_t)

# set转字符串、列表、元组
s=set([1,2,3,3,2,4,1])
str_s = ""
for i in s:
	str_s += str(i)
print("set to str:",str_s)
list_s = list(s)
print("set to list:",list_s)
tuple_s = tuple(s)
print("set to tuple:",tuple_s)

7. 结合set对象,统计某个list出现的重复元素个数

>>> l=[1,2,4,4,3,3,3,2,1,4,5,8]
>>> print("list出现的重复元素个数:",len(l)-len(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值