习题集
一、递归
1.1 使用递归实现:计算某个数的阶乘
阶乘概念:一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!
def factorial(n):
if n < 0:
return "负数没有阶乘"
elif n == 0 or n == 1:
return 1
else:
return factorial(n - 1) * n
1.2 使用递归函数来实现获取斐波拉契数列中第n个数字的值
斐波拉契数列概念:从第3个数开始,后一个数等于前面两个数的和
def get_fib(count):
if count <= 0:
return "输入正数"
if count <= 2:
return count - 1
else:
return get_fib(count - 1) + get_fib(count - 2)
二、函数封装
2.1 封装函数实现如下要求
例如:输入2,5
则求:2+22+222+2222+22222的和
def sum(x, y):
result = 0
item = 0
for i in range(y):
z = x * pow(10, i)
item += z
result += item
return result
2.2 判断某个数是否是素数,返回结果
素数概念:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数
def prime_number(n):
if n <= 1:
print("{}不是质数".format(n))
return 0
elif n > 1:
for i in range(2, n):
# for循环寻找因子
if n % i == 0:
print("{}不是质数".format(n))
return 0
# 此处注意缩进位置:一定要在for循环完了还没找到因子的情况下才执行下方代码
print("{}是质数".format(n))
return 1
2.3 计算2-100之间素数的个数,返回结果
调用一下2.2的函数:
def prime_count(a,b):
count = 0
for i in range(a,b+1):
if prime_number(i):
count += 1
print("{}到{}之间的质数个数为{}个".format (a,b,count))
prime_count(2,100)
打印结果:
2到100之间的质数个数为25个
2.4 交换某两个变量的值
使用临时变量
引入一个新的变量:
def exchange_value(value1, value2):
a = value1
b = value2
# 引入新的变量c进行交换
c = a
a = b
b = c
print("value1={}, value2={}".format(a, b))
return a, b
exchange_value(1,2)
输出结果;
value1=2, value2=1
不使用临时变量
1. 算术法
def exchange_value(value1, value2):
a = value1
b = value2
a = a + b
b = a - b
a = a - b
print("value1={}, value2={}".format(a, b))
return a, b
print(exchange_value(1,2))
输出结果:
value1=2, value2=1
(2, 1)
2. 异或法
def exchange_value(value1, value2):
a = value1
b = value2
a = a ^ b
b = a ^ b
a = a ^ b
print("value1={}, value2={}".format(a, b))
return a, b
print(exchange_value(1,2))
输出结果:
value1=2, value2=1
(2, 1)
3. py独有法
def exchange_value(value1, value2):
a = value1
b = value2
a, b = b, a
print("value1={}, value2={}".format(a, b))
return a, b
print(exchange_value(1,2))
输出结果:
value1=2, value2=1
(2, 1)
三、数据类型
3.1 将元组(1,2,3)和集合(“four”,5,6)合成一个列表
tuple1 = (1,2,3)
set1 = ("four",5,6)
list1 = (tuple1,set1)
print(list1)
((1, 2, 3), ('four', 5, 6)
3.2 将列表[3,7,0,5,1,8]中大于5元素置为0,小于5的元素置为1
list = [3,7,0,5,1,8]
for i in range(len(list)):
if list[i] > 5:
list[i] = 0
elif list[i] < 5:
list[i] = 1
print(list)
[1, 0, 1, 5, 1, 0]
3.3 将列表[“mo”,“deng”,“ge”]和[1,2,3]转换成[(“mo”,1),(“deng”,2),(“ge”,3)]
list1 = ["mo","deng","ge"]
list2 = [1,2,3]
newlist = []
for i in range(3):
a = list1[i]
b = list2[i]
c = (a,b)
newlist.append(c)
print(newlist)
3.4 若a = dict(),令b = a,执行b.update({“x” : 1}),a亦改变,为何,如何避免
# 创建变量a时会在内存中给dict()开辟一个空间
a = dict()
# 创建变量b时会在被分配到与变量a同名同一个内存空间
b = a
print(id(a))
print(id(b))
b.update({"x" : 1})
print(a)
# 由此可见python中的赋值符号只是传地址(引用)并非传值(拷贝)
import copy
c = copy.deepcopy(a)
print(id(c))
c.update({"y" : 2})
print(c)
print(a)
# a并未改变由此可见深度拷贝才是传值
139869967054960
139869967054960
{'x': 1}
139869967592256
{'x': 1, 'y': 2}
{'x': 1}
3.5 将二维结构[[‘a’,1],[‘b’,2]]和((‘x’,3),(‘y’,4))转化成字典
使用dict()函数
list = [['a',1],['b',2]]
tuple = (('x',3),('y',4))
print(dict(list))
print(dict(tuple))
{'a': 1, 'b': 2}
{'x': 3, 'y': 4}
四、IO
4.1 封装一个删除文件函数os.remove()
import os
def deleteFile(fileName):
listdir = os.listdir(os.getcwd())
if fileName in listdir:
os.remove(fileName)
return 文件已删除
else:
return 文件不存在
4.2 简述os.walk()和os.chdir()作用和写一个例子并打印结果
os.walk()
os.chdir()
os.chdir() 方法用于改变当前工作目录到指定的路径。语法:os.chdir(path)
import os
# 获取当前工作目录
pwd = os.getcwd()
print("当前工作目录是:{}".format(pwd))
# 指定工作目录
cpath = "/tmp"
cwd = os.chdir(cpath)
print("工作目录修改为:{}".format(cpath))
打印结果为:
当前工作目录是:/box
工作目录修改为:/tmp
五、RE(Regular Express)
5.1 验证电子邮件字符串是否合法
要求:
- @之前不能包含(中杠)-,及其他$&等符号,但可以包含(点) . ,开头字母和数字
- 统一命名is_valid_email()
- @之后数字或者字母
- 后缀.com.gov.net任一结尾
import re
def is_valid_email():
inputStr = input("请输入内容:")
pattern = re.compile('\w+\.?\w+@\w+\.com|gov|net')
m = pattern.search(inputStr)
print(m)
is_valid_email()
5.2 提取合法的电子名词
import re
def find_valid_email():
inputStr = input("请输入内容:")
pattern = re.compile('\w+\.?\w+@\w+\.com|gov|net')
m = pattern.findall(inputStr)
print(m)
find_valid_email()
六、面向对象
6.1 定义一个类描述数字时钟
要求:给定一个时间,例如15:50:00,则最终的效果为,如图…
import time
class DesClock(object):
def localTime(self):
i = 20
while i > 0:
t = time.strftime("%H:%M:%S",time.localtime())
print(t)
i -= 1
time.sleep(1)
a = DesClock()
a.localTime()
6.2 定义管理员类:
管理员类有属性(name,password),可以创建学校、创建课程、创建老师
class Admin(object):
def __init__(self):
self.name = admin
self.password = 666666
def creatSchool(self):
print("创建学校")
def creatCourse(self):
print("创建课程")
def creatTeacher(self):
print("创建老师")