1、实现自己的数学模块mymath,提供有4个函数,分别为加减乘除,
在B模块中调用A模块的函数。
mymath.py的内容:
#encoding=utf-8
def add(*args):
result = 0
for i in args:
result += i
return result
def sub(a,b,*args):
return a-b
def mul(a,b):
return a*b
def div(a,b):
try:
result = a / b
except ZeroDivisionError:
print("ZeroDivisionError: division by zero")
return result
b.py的内容:
import mymath
print(mymath.add(10,20,30))
print(mymath.sub(10,20))
print(mymath.mul(10,20))
print(mymath.div(10,20))
2、实现自己的字符串模块mystr,里面有方法:isdigit,strip, join,split
mystr.py的内容:
#encoding=utf-8
def isdigit(s):
for i in s:
if i not in "0123456789":
return False
return True
def strip(s,strip_str=None):
if strip_str == None:
strip_str = "\r\n\t\f"
s = list(s)
s_copy = s[:]
for i in s:
if i in strip_str:
s_copy.remove(i)
else:
break
for i in s[::-1]:
if i in strip_str:
s_copy.remove(i)
else:
break
return "".join(s_copy)
def join(lst,join_str=None):
if join_str == None:
join_str = ""
result = ""
for i in lst:
result += (i + join_str)
if join_str == "":
return result
return result[:-1]
def split(s,split_str=None,times=None):
if split_str == None:
split_str = " "
if times == None:
times = s.count(split_str)
result = []
index = 0
split_str_length = len(split_str)
while times > 0:
temp = ""
for i in range(index,len(s)):
if s[i:i+split_str_length] != split_str:
temp += s[i]
index += 1
else:
result.append(temp)
index += split_str_length
break
times -= 1
result.append(s[index:])
return result
if __name__ == "__main__":
print(isdigit("876"))
print(strip("$$igko$$$","$"))
print(join(["1","2","3"],"*"))
print(split("fgy|kiu|jhgf|sder","|"))
3、构建一个模块的层级包
在e盘下建立一个目录名称为:m_a
m_a目录下建立一个子目录:m_b
两个目录下分别建立一个__init__.py文件,文件内容为空
m_a目录下建立一个文件a.py,代码如下:
def sum(a,b):
return a+b
m_b目录下建立一个文件b.py,代码如下:
def mul(a,b):
return a*b
再在e盘下建立一个测试文件,x.py,代码如下:
#encoding=utf-8
import m_a.a
import m_a.m_b.b
print m_a.a.sum(1,1)
print m_a.m_b.b.mul(1,10)
4、实现一个除法函数,并处理异常
import traceback
def div(a,b):
try:
return a/b
except ZeroDivisionError as e:
print(traceback.print_exc())
print("除数不能为0!")
except Exception as e:
print(traceback.print_exc())
print(e)
print("其他错误!")
div(1,0)
5、引发一个异常,并将它抛除到上层函数,上层函数捕获该异常并处理
def div(a,b):
try:
a/b
except Exception as e:
raise e
def test(a,b):
try:
print("开始调用除法函数")
div(a,b)
print("调用除法函数结束")
except ZeroDivisionError as e:
print("除数不能为0!",e)
except Exceptiona as e:
print("其他错误",e)
print("错误处理后继续执行其他后续操作!")
if __name__== "__main__":
test(1,0)
6、实现字符串、列表、元组和set之间互相转换
#转列表
#字符串转列表
s = "you are the best man"
s_list = list(s)
print(s_list)
#元组转列表
t = ("name","sex","age","school")
t_list = list(t)
print(t_list)
#set转列表
set1 = {1,2,"aa","XYZ"}
set1_list = list(set1)
print(set1_list)
#转字符串
#列表转字符串
lst = ['my','name','is','hh']
lst_str = "".join(lst)
print(lst_str)
#元组转字符串
t = ("name","sex","age","school")
t_str = "".join(t)
print(t_str)
#set转字符串
set1 = {1,2,"aa","XYZ"}
set1_str = "".join(set1)
print(set1_str)
#转元组
#字符串转元组
s = "you are the best man"
s_tuple = tuple(s)
print(s_tuple)
#列表转元组
lst = ['name', 'sex', 'age', 'school']
lst_tuple = tuple(lst)
print(lst_tuple)
#set转元组
set1 = {"1","2","a","XYZ"}
set1_tuple = tuple(set1)
print(set1_tuple)
#转set
#列表转set
lst = ['name', 'sex', 'age', 'school']
lst_set = set(lst)
print(lst_set)
#字符串转set
s = "you are the best man"
s_set = set(s)
print(s_set)
#元组转set
t = ("name","sex","age","school")
t_str = set(t)
print(t_str)
7、结合set对象,统计某个list出现的重复元素个数
lst = [1,1,2,2,3,4,5,5,6]
print("重复元素的个数:",len(lst)-len(set(lst)))
8、定义一个元组,向元组中添加元素或者修改已有元素,并捕获异常
t = (1,2,3)
try:
t[0] = 4
except Exception as e:
print(e)
9、删除无重复元组中给定的元素,并生成一个新元组
result = []
t = (1,2,3,4,5,6)
for i in t:
if i == 4:
continue
else:
result.append(i)
print(tuple(result))
10、有一个ip.txt,里面每行是一个ip,实现一个函数,ping 每个ip的结
果,把结果记录存到ping.txt中,格式为ip:0或ip:1 ,0代表ping成功,1
代表ping失败
11、实现DOS命令执行功能,接受输入命令并执行,然后把执行结果打
印到屏幕
def excute_dos_command(command):
import os
os.system(command)
excute_dos_command("dir")
12、求一个n*n矩阵对角线元素之和
arr = [[1,2,3],[4,5,6],[7,8,9]]
result = 0
for i in range(len(arr)):
for j in range(len(arr[i])):
if i == j:
result += arr[i][j]
print("对角线之和为:",result)
13、输入一个数组,最大的与第一个元素交换,最小的与最后一个元素
交换,输出数组
def max_min_number(arr):
max_item = arr[0]
min_item = arr[0]
for item in arr:
if item > max_item:
max_item = item
if item < min_item:
min_item = item
arr[0] = max_item
arr[-1] = min_item
return arr
lst2 = [1,2,3,4,89,66,5,10]
print("交换后的数组:",max_min_number(lst2))
14、平衡点,一个数组,有一个数字左边所有的数字加起来的总和等于
这个数右边所有数字的总和,请输出这个数以及坐标
def balance_point(arr):
num_dict = {}
for i in range(len(arr)):
if i >= 1:
if sum(arr[:i]) == sum(arr[i+1:]):
num_dict[arr[i]] = i
return num_dict
arr = [1,2,3,4,5,1]
print(balance_point(arr))
arr = [1,2,3,4,5,1]
for idx,value in enumerate(arr):
if sum(arr[:idx]) == sum(arr[idx+1:]):
print(idx,value)
break
15、将单词表中由相同字母组成的单词归成一类,每类单词按照单词的
首字母排序,并按每类中第一个单词字典序由大到小排列输出各个类别。
输入格式:按字典序由小到大输入若干个单词,每个单词占一行,以end
结束输入。
cinema
iceman
maps
spam
aboard
abroad
end
输出格式:一类单词一行,类别间单词以空格隔开。
aboard abroad
cinema iceman
maps spam
#encoding=utf-8
with open("e:\\a.txt") as file_obj:
word_list = []
words = file_obj.readlines()
#如果当前位置后面的列表元素,也有相同字母组成的单词,加入单词列表
for i in range(len(words)):
for j in range(i+1,len(words)):
#如果当前单词不在单词列表,且i位置和j位置的单词排序后得到的列表相等,都加入单词
列表
if words[i] not in word_list and sorted(words[i])==sorted(words[j]):
word_list.append(words[i])
word_list.append(words[j])
print(word_list)
#遍历相同字母组成的单词列表,把相同的加入到一个子列表,然后把子列表加入到结果列表
result_list = []
for i in range(len(word_list)):
#定义子列表,存储相同的单词
tmp_list = []
for j in range(i+1,len(word_list)):
#如果当前单词不在子列表,且且i位置和j位置的单词排序后得到的列表相等,都加入子列表
if word_list[i] not in tmp_list and sorted(word_list[i]) == sorted(word_list[j]):
tmp_list.append(word_list[i])
tmp_list.append(word_list[j])
#把子列表加入结果列表
if tmp_list:
result_list.append(tmp_list)
#打印结果列表里面的每个子列表,也就是相同的单词
for sub_list in result_list:
tmp_str = ""
for word in sub_list:
tmp_str += word.strip() + " "
print(tmp_str)
16、输入一个数组,实现一个函数,让所有奇数都在偶数前面
方法1:遍历数组,奇数的存一个列表,偶数的存一个列表,然后把奇数列表和偶数列表相加
def func1(arr):
odd = []
even = []
for i in arr:
if i % 2 != 0:
odd.append(i)
else:
even.append(i)
return odd+even
print(func1([1,2,3,4,5,6,7,8]))
方法2:按坐标遍历数组,如果是奇数,就在数组的开头位置插入
def func(arr):
for i in range(len(arr)):
if arr[i] % 2 == 1:
arr.insert(0,arr.pop(i))
return arr
print(func([1,2,3,4,5,6,7,8]))
17、lista=[‘a’,‘abc’,‘d’,‘abc’,‘fgi’,‘abf’],寻找列表中出现次数最多的第一个
字母,出现了几次
方法1:
首先求出所有的首字母列表
求出每个首字母出现的次数用字典保存
找出出现次数最多的首字母
lista = ['a','abc','d','abc','fgi','abf']
first_letter_list = []
for i in lista:
first_letter_list.append(i[0])
first_letter_dict = {}
for letter in first_letter_list:
first_letter_dict[letter] = first_letter_list.count(letter)
print(first_letter_dict)
for k,v in first_letter_dict.items():
if v == max(first_letter_dict.values()):
print("出现次数最多的字母:%s,出现次数:%d" %(k,v))
方法2:生成一个空字典用来存放首字母及出现次数
遍历列表,如果首字母在字典中,就把首字母的次数加一存到字典,如果不 在,就把首字母及次数存到字典中。
最后遍历字典找出次数做多的首字母。
lista = ['a','abc','d','abc','fgi','abf']
first_letter_dict = {}
for i in lista:
if first_letter_dict.get(i[0]):
first_letter_dict[i[0]] += 1
else:
first_letter_dict[i[0]] = 1
print(first_letter_dict)
for k,v in first_letter_dict.items():
if v == max(first_letter_dict.values()):
print("出现次数最多的字母:%s,出现次数:%d" %(k,v))
18、请输入星期几的前两个字母来判断一下是星期几,如果第一个字母
一样,则继续判断第二个字母
weeks = ['monday','tuesday','wendsday','thursday','friday','saturday','sunday']
while 1:
first_word_list = [word[0] for word in weeks]
first_letter = input("请输入第一个字母:")
if first_letter not in first_word_list:
break
if first_word_list.count(first_letter) > 1:
second_letter = input("请输入第二个字母:")
for word in weeks:
if word[0] == first_letter and word[1] == second_letter:
print(word)
else:
for word in weeks:
if word[0] == first_letter:
print(word)
19、有一堆100块的石头,2个人轮流随机从中取1-5块,谁取最后一块就
谁win,编程实现此过程
20、实现一个方法,判断一个正整数是否是2的乘方,比如16是2的4次方
,返回True;18不是2的乘方,返回False。要求性能尽可能高
import math
def func(num):
for i in range(int(math.sqrt(num)+1)):
if pow(2,i) == num:
return True
return False
print(func(16))
print(func(18))