1 递归


1.1 定义一个函数,求一个数的阶乘

def func(x):
if x == 2:
return 2
else:
return x*func(x-1)
a = func(4)
print(a)

24

1.2 使用递归函数打印输出第n个数字的值(ps:斐波拉契数列也称兔子数列:从第三个数开始,后一个数等于前面两个 数的和)

def an_func(n):    #求斐波拉契数列的第n个数
if n == 1:
return 0
elif n == 2:
return 1
else:
return an_func(n-1) + an_func(n-2)
n = int(input("您想查看斐波拉契数列哪个数(如3表示3个数):"))
print("斐波拉契数列第{}个数为:{}".format(n,an_func(n)))

您想查看斐波拉契数列哪个数(如3表示3个数):10
斐波拉契数列第10个数为:34

Process finished with exit code 0

2 封装函数


2.1 封装函数实现如下要求:

例:输入2,5则打印输出:

2+22+222+2222+22222

def demo(f):
def func(x,y): #定义内层函数(即装饰的功能函数),两个功能:一个是打印出式子,另一个是计算结果
Str = "" #空字符串,用来生成一个字符串,实现第一个功能 "x + xx + ... + x...x ="
for i in range(1, y + 1): #这里renge(a,b,k=1)包左不包右,步长k默认为1
Str += str(x) * i #利用字符串的加法运算将字符串连接起来(利用字符串乘法重复运算)
if i == y: #使用条件语句连接完数字后再连接一个加号,但在最后一个后面连接等号
Str += "="
else:
Str += "+"
sum = 0 #通过累加计算以上数学运算式子的值
for j in range(1, y + 1): #这里的range()序列遍历主要为第j个x的长度
sum += int(str(x) * j)
return f(Str,sum) #这是个函数表达式,Str和sum已经通过外层返回的函数名计算出来了,传递给f()函数执行出最终结果
return func #返回内层函数名主要是通过内层函数计算出Str和sum的值传递到f()函数中执行
# @demo #如果执行此句,后面无需a=dimo(f)来间接调用,可直接f(8,10)执行出结果
def f(a,b):
print(a,b)
a = demo(f) #可以直接写dimo(f)(8,10)同样可以执行出结果
a(8,10)
a(5,6)
a(2,2)
demo(f)(3,6)

8+88+888+8888+88888+888888+8888888+88888888+888888888+8888888888= 9876543200
5+55+555+5555+55555+555555= 617280
2+22= 24
3+33+333+3333+33333+333333= 370368

Process finished with exit code 0

2.2 判断一个数是否为素数(1既不是素数也不是和数)

def demo(f):                       #定义装饰器函数
def func(num): #定义一个内层功能函数
if num == 1: #特殊情况
num= "既不是素数也不是和数"
elif num == 2: #2不能放在下面的for循环中,因为range(2,2)是个空序列,会直接不执行循环体
num = "否"
elif num > 2:
for i in range(2,num): #遍历2~(num-1)每个数试探,如果期间存在一个数能整除num,则它不是素数
if num % i == 0:
num = "否"
break #判断完毕,终止并跳出循环语句
elif i == num-1: #如果循环语句都遍历到num-1了就可以肯定它就是素数
num = "是"
return f(num) #通过外层函数返回的函数名再加上括号就能算出num的值,传递给p来执行judge_prime_num()函数
return func
@demo
def judge_prime_num(p):
print("您输入的这个数是否为素数?——%s"%p)
judge_prime_num(25)
judge_prime_num(13)
judge_prime_num(101)
judge_prime_num(1)

您输入的这个数是否为素数?——否
您输入的这个数是否为素数?——是
您输入的这个数是否为素数?——是
您输入的这个数是否为素数?——既不是素数也不是和数

2.3 计算2~100之间素数的个数,并返回结果

def demo(f):                         #定义一个外层函数
def func(): #在外层函数内定义一个函数(该函数主要实现所需要封装的功能),因为指定2~100内,所以不需要形参
sum = 0 #后面通过sum+=1来统计素数的个数
for i in range(2, 101): #从2~100中取数,后面挨个判断是否为素数
for j in range(2, i): #该循环体从2到i-1中挨个取数,若存在一个数能整除i,则i不是素数,若j取到了i-1,说明i只被1和它本身整除
if i % j == 0:
break
elif j == i-1:
sum += 1 #当j都取到i-1了还找不到整除i的数,则i是素数,此处对sum+1进行累计
return f(sum+1) #因为当i=2时,range(2,2)为空,循环无法进行,直接结束了,所以2被漏掉了,所以sum+1将2补回来
return func() #在调用f1时,通过返回
# @f1
def f(p):
print("2~100内有%d个素数"%p) #func()函数无形参为何此处有?因为他需要传递统计的结果
demo(f) #该语句的意思就是用f1()函数装饰f()函数的意思,因为@具备此功能就将此注释掉了 """
(1)通过语句f1(f)调用f1函数,注意f1(f)是一个函数运算表达式,他需要执行f1()函数,得到的值为f2()
(2)f2()是内层函数运算表达式,它也是有值的,它的值是f(sum+1),这个仍然是函数运算表达式,它的值是什么???
(3)在内层函数中我们通过语句运算已经得出了sum+1=25,也就是说f1(f)最终的返回值是f(25),它仍然还是个函数表达式,继续调用函数运算
(4)执行f函数得到最终结果>>2~100内有25个素数
"""

您输入的这个数是否为素数?——否
您输入的这个数是否为素数?——是
您输入的这个数是否为素数?——是
您输入的这个数是否为素数?——既不是素数也不是和数

2.4 交换两个变量的值

def demo(f):
def func(x,y):
return f(y,x)
return func
@demo
def f (a,b):
print("a=%d,b=%d"%(a,b))
a=int(input("请输入第一个数a="))
b=int(input("请输入第二个数b="))
f(a,b)

请输入第一个数a=2
请输入第二个数b=3
a=3,b=2

3 数据类型


3.1 将元组(1,2,3)与集合{“four”,5,6}合成一个列表

tuple,set,list = (1,2,3),{"four",5,6},[]
for i in tuple:
list.append(i)
for j in set:
list.append(j)
print(list)

[1, 2, 3, 'four', 5, 6]

3.2 将列表[3,7,0,5,1,8]中大于5的元素置为0,小于5的元素置为1

list2 = [3,7,0,5,1,8]
print(list2)
for i in range(0,len(list2)):
if list2[i] >5:
list2[i] = 0
elif list2[i]<5:
list2[i]=1
print(list2)

[3, 7, 0, 5, 1, 8]
[1, 0, 1, 5, 1, 0]

3.3 将列表[“mo”,“deng”,“ge”]和[1,2,3]转换成[(“mo”,1),("deng",2),("ge",3)]

#方法一:
Sl1,Nl1,new_list1=["mo","deng","ge"],[1,2,3],[]
for i in Sl1:
for j in Nl1:
if Sl1.index(i) == Nl1.index(j):
new_list1.append((i,j))
print("new_list1=",new_list1)
#方法二:
Sl2,Nl2,new_list2=["mo","deng","ge"],[1,2,3],[]
for a in range(0,len(Sl2)):
for b in range(0,len(Nl2)):
if a == b:
new_list2.append((Sl2[a],Nl2[b]))
print("new_list2=",new_list2)
#方法三:
Sl3,Nl3=["mo","deng","ge"],[1,2,3]
print("new_list3=",[(Sl3[0],Nl3[0]),(Sl3[1],Nl3[1]),(Sl3[2],Nl3[2])])
#方法四:
Sl4,Nl4,new_list4=["mo","deng","ge"],[1,2,3],[]
for k in range(0,3):
new_list4 += [(Sl4[k],Nl4[k])]
print("new_list4=",new_list4)

new_list1= [('mo', 1), ('deng', 2), ('ge', 3)]
new_list2= [('mo', 1), ('deng', 2), ('ge', 3)]
new_list3= [('mo', 1), ('deng', 2), ('ge', 3)]
new_list4= [('mo', 1), ('deng', 2), ('ge', 3)]

3.4 若a=dict(),令b=a,执行b.update({“x”:“/”}),a亦改变,为何,如何避免?

(1)因为变量a是引用空字典dict()对应的地址,而b=a表示a仅仅把a所引用的地址赋值给b,也就是a,b所引用的是同一个地址所指的变量(Python中地址空间的开辟因具体值的新增而产生)

(2)对b进行重新赋实际值如b=dict(),相当于重新开辟地址空间,可避免这一问题

a = dict()
b = dict()
b.update({"x":"/"})
print(a,b)

{} {'x': '/'}


或者使用copy()函数重新开辟一个地址空间进行赋值

a = dict()
b = a.copy()
b.update({"x":"/"})
print(a,b)

{} {'x': '/'}


3.5 将二维结构[[“a”,/],["b",2]]和(("x",3),("y",4))转换成字典

#将二维结构[["a","/"],["b",2]]和(("x",3),("y",4))转换成字典
list1,tuple1=[["a","/"],["b",2]],(("x",3),("y",4))
dict1=dict(list1)
dict2=dict(tuple1)
print(dict1,dict2)

{} {'x': '/'}

4 IO


4.1 封装一个删除文件函数

def Demo(Del_File):
def func(file1):
import os
open(file1)
os.remove(file1)
return Del_File(file1)
return func
@Demo
def Del_File(file):
print("已删除文件{}".format(file))
Del_File("t1.txt")

已删除文件t1.txt

4.2 简述os.wolk()和os.chdir()作用,举例打印结果

5 RE(Regular Express)


5.1 验证电子邮件字符串是否合法,要求:

①@之前不含-(中杠)

②@前不含¥&等其他符号

③开头可以为点或逗号

④后缀.com/.gov/.net任一结尾

import re

def is_At(email):                #检测电子邮件标志性符号@是否唯一
if email.count("@") == 1:
return True
else:
return False def is_Legal(email):
left_email = email.split("@")[0] #将邮件地址字符串分隔成@前后两段
right_email = email.split("@")[1] pattern1 = re.compile(".*?-") #@前不含中杠-
result1 = pattern1.match(left_email) pattern2 = re.compile(".*?[^a-zA-Z0-9.,/]") #@前不含&¥等其他符号
result2 = pattern2.match(left_email) pattern3 = re.compile(".*?([.com]|[.gov]|[.net])$") #后缀为.com /.gov /.net
result3 = pattern3.match(right_email) if not result1 and not result2 and result3: #设定函数返回值
return True
else:
return False if __name__ == "__main__":
while True:
email = input("请输入电子邮件地址:")
if is_At(email) and is_Legal(email):
print("您输入的电子邮件合法!")
else:
print("您输入的电子邮件地址不合法")

请输入电子邮件地址:fjaido@dfji@qq.com
您输入的电子邮件地址不合法
请输入电子邮件地址:fjoai-jfaid@qq.com
您输入的电子邮件地址不合法
请输入电子邮件地址:.fjiaosd@qq.com
您输入的电子邮件合法!
请输入电子邮件地址:,fjiaods@qq.com
您输入的电子邮件合法!
请输入电子邮件地址:fjiao!jfida#djfi@qq.com
您输入的电子邮件地址不合法
请输入电子邮件地址:jfid@qq.com
您输入的电子邮件合法!
请输入电子邮件地址:jfiaod@qq.gov
您输入的电子邮件合法!
请输入电子邮件地址:fjiaosd@qq.net
您输入的电子邮件合法!
请输入电子邮件地址:jfiaod@qq.com!#djfi%fjid.com
您输入的电子邮件合法!
请输入电子邮件地址:fjiaod@qq.comdkjfo#$.gov
您输入的电子邮件合法!

5.2 提取合法的电子名称name_of_email()

import re
def Decorate(func):
def is_Legal(email):
pattern = re.compile("[\w.,]+[@]+[\w.]+([.com]|[.gov]|[.net])$")
result = pattern.match(email)
if result:
return func(email)
else:
print("电子邮件地址不合法")
return is_Legal @Decorate
def name_of_email(email):
p = re.compile("[\w.,]+")
m = p.match(email)
print("电子邮件名:",m.group())
while 1 :
email=input("请输入电子邮件地址:")
name_of_email(email)
print(""


请输入电子邮件地址:someone@gmail.com
电子邮件名: someone


请输入电子邮件地址:bill.gates@microsoft.com
电子邮件名: bill.gates


请输入电子邮件地址:597116500@qq.com
电子邮件名: 597116500


请输入电子邮件地址:r-bob@example.com
电子邮件地址不合法


请输入电子邮件地址:597116500@qq.net
电子邮件名: 597116500


请输入电子邮件地址


6 面向对象


6.1 定义一个类描述数字时钟

要求:给定一个时间,如15:50:00,则最终效果为:

class Clock():
def __init__(self,hour1,minute1,second1):
self.hour = hour1
self.minute = minute1
self.second = second1
def Show_Time(self):
while True:
self.second = int(self.second) + 1
if self.second < 10:
self.second = ""+str(self.second)
print("{}:{}:{}".format(self.hour, self.minute, self.second))
if self.second == 12:
break
a = input("请输入小时:")
b = input("请输入分钟:")
c = input("请输入秒数:")
time = Clock(a,b,c)
time.Show_Time()


请输入小时:12
请输入分钟:15
请输入秒数:00
12:15:01
12:15:02
12:15:03
12:15:04
12:15:05
12:15:06
12:15:07
12:15:08
12:15:09
12:15:10
12:15:11
12:15:12

6.2 定义管理员类:

①管理员属性:name,password

②行为:可以创建学校、创建课程、创建老师

class Admin():
def __init__(self,name1,password1):
self.name = name1
self.password = password1
def Behavior(self):
import time
while True:
if not ((self.name == "校长") and (self.password == "")):
print("您的账户或密码输入错误,",end="")
self.name = input("请重新输入账户:")
self.password = input("请输入密码:")
else:
print("\n登录成功,业务准备中...\n")
time.sleep(5)
print("1:新建学校\n2:创建课程\n3:招聘老师\n4:退出系统")
choice = int(input("\n请输入您需要执行业务的编号:"))
break
while True:
if not choice in [1, 2, 3, 4]:
choice = int(input("您 的 输 入 有 误 , 请 重 新 输 入 : "))
elif choice == 1:
print("正在新建学校,请耐心等待5秒...")
time.sleep(5)
print("恭喜您,新建学校已完成!!!")
choice = int(input("\n1:新建学校\n2:创建课程\n3:招聘老师\n4:退出系统\n\n请输入您需要执行业务的编号:"))
elif choice == 2:
print("正在创建课程,请耐心等待5秒...")
time.sleep(5)
print("恭喜您,创建课程已完成!!!")
choice = int(input("\n1:新建学校\n2:创建课程\n3:招聘老师\n4:退出系统\n\n请输入您需要执行业务的编号:"))
elif choice == 3:
print("正在招聘老师,请耐心等待5秒...")
time.sleep(5)
print("恭喜您,招聘老师已完成!!!")
choice = int(input("\n1:新建学校\n2:创建课程\n3:招聘老师\n4:退出系统\n\n请输入您需要执行业务的编号:"))
elif choice == 4:
print("\n\n欢迎下次再来!")
break a = input("请输入您的账户名:")
b = input("请输入您的密码:")
User = Admin(a,b)
User.Behavior()


请输入您的账户名:校
请输入您的密码:123456
您的账户或密码输入错误,请重新输入账户:校长
请输入密码:1
您的账户或密码输入错误,请重新输入账户:校长
请输入密码:123456


登录成功,业务准备中...


1:新建学校
2:创建课程
3:招聘老师
4:退出系统


请输入您需要执行业务的编号:10
您 的 输 入 有 误 , 请 重 新 输 入 : 1
正在新建学校,请耐心等待5秒...
恭喜您,新建学校已完成!!!


1:新建学校
2:创建课程
3:招聘老师
4:退出系统


请输入您需要执行业务的编号:10
您 的 输 入 有 误 , 请 重 新 输 入 : 2
正在创建课程,请耐心等待5秒...
恭喜您,创建课程已完成!!!


1:新建学校
2:创建课程
3:招聘老师
4:退出系统


请输入您需要执行业务的编号:3
正在招聘老师,请耐心等待5秒...
恭喜您,招聘老师已完成!!!


1:新建学校
2:创建课程
3:招聘老师
4:退出系统


请输入您需要执行业务的编号:4


欢迎下次再来!


最新文章

  1. zabbix 3.0.4 监控windows 服务
  2. 01-08-02【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider
  3. Chrome下的语音控制框架MyVoix.js使用篇(三)
  4. 关于code reivew
  5. 基于协程的Python网络库gevent
  6. python之地基(三)
  7. redis持久化和主从同步
  8. docker 安装elasticSearch7.0.0
  9. [转载] java多线程总结(三)
  10. Linux shell脚本学习(一)
  11. Sequential Container
  12. [administrator][netctl] 给未插线未UP端口设置IP
  13. [Java] Create File with java.io.File class
  14. [SQL]用SQL语句断开某个数据库的所有活动连接
  15. java8新特性(六):Stream多线程并行数据处理
  16. 终端(terminal)、tty、shell、控制台(console)、bash之间的区别与联系
  17. log4j log for java
  18. CR, LF, CR/LF区别与关系
  19. 1093 字符串A+B (20 分)
  20. VUE 内置的标签&lt;keep-alive&gt;&lt;/keep-alive&gt;作用

热门文章

  1. 使用SpringAOP实现事务(声明式事务管理、零配置)
  2. hive判断数据一个表是否在另一个表中(二)
  3. IDEA创建spring加struts2项目
  4. 【leetcode】1237. Find Positive Integer Solution for a Given Equation
  5. JS 全局作用域和局部作用域
  6. Windows环境下MySQL面试技巧
  7. python 数据库插入操作
  8. [CSP-S模拟测试]:多维网格(组合数学+容斥)
  9. Java容器——Set和顺序存储
  10. 整合spring之后,struts2里面的自定义拦截器的invocation.invoke()总是返回input