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


欢迎下次再来!


Python_Onlineh_Hmework(基础篇,持续更新中...)的更多相关文章

  1. Pig语言基础-【持续更新中】

      ***本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.***   Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的, ...

  2. nodejs基础【持续更新中】

    简介 Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-dr ...

  3. Java基础——集合(持续更新中)

    集合框架 Java.util.Collection Collection接口中的共性功能 1,添加 booblean add(Object obj);  往该集合中添加元素,一次添加一个 boolea ...

  4. Java基础——多线程(持续更新中)

    如何建立一个执行路径呢? 通过查询API文档 java.lang.Thread类 该类的描述中有创建线程的两种方式 1.继承Thread类 (1).将类声明为 Thread 的子类 (2).该子类应重 ...

  5. Linux 基础命令 持续更新中...

    1.ls 显示当前文件/文件夹 显示文件大小: ls -lh  显示隐藏文件: ls -a 显示文件详细信息: ls -l (ll)2.pwd 显示当前所在路径 cat 显示当前文件下所有内容3.cd ...

  6. Python开发【第二十三篇】:持续更新中...

    Python开发[第二十三篇]:持续更新中...

  7. 前端深入之js篇丨Array数组操作从入门到成神Up Up Up,持续更新中

    写在前面 随着前端深入的不断学习,发现数组这个数据结构在前端中有着相当大的存在感,由于我初学前端的时候并没有系统性的学习数组,所以我将通过这篇文章同你一起学习数组,希望我们能一起进步,学会熟练操作数组 ...

  8. Pig基础学习【持续更新中】

    *本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.* Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的,可以作为MapR ...

  9. 《WCF技术剖析》博文系列汇总[持续更新中]

    原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...

  10. 史上最全的spark面试题——持续更新中

    史上最全的spark面试题——持续更新中 2018年09月09日 16:34:10 为了九亿少女的期待 阅读数 13696更多 分类专栏: Spark 面试题   版权声明:本文为博主原创文章,遵循C ...

随机推荐

  1. WebKitBrowser

    WebKit.net是对WebKit的.Net封装, 使用它.net程序可以非常方便的集成和使用webkit作为加载网页的容器. 首先 下载WebKit.net 的bin文件. 然后 新建一个Wind ...

  2. 深浅拷贝(copy)

    目录 copy 模块 1.拷贝(赋值) 1). x为不可变数据类型 2). x为可变数据类型 3). 可变数据类型(比如列表)内,既有不可变元素,又有容器类型可变元素(比如列表) 2.浅拷贝 3.深拷 ...

  3. Angular7和leaflet一起使用时的作用域不一致

    Angular7和leaflet一起使用时的作用域不一致问题,使用(e) =>可以完美解决. 使用原始的JavaScript: map.on("click", functio ...

  4. BeanUtils对象属性copy的性能对比以及源码分析

    1. 对象属性拷贝的常见方式及其性能 在日常编码中,经常会遇到DO.DTO对象之间的转换,如果对象本身的属性比较少的时候,那么我们采用硬编码手工setter也还ok,但如果对象的属性比较多的情况下,手 ...

  5. laravel短信验证

    短信验证按钮倒计时功能: $('.btn').click(function(){ var time = 59; // $('.btn').css('background-color','#ccc'); ...

  6. datetime模块的常用总结

    datetime模块 datetime模块提供了一些处理日期和时间的标准库.常用的有 datetime timedelta timezone 构造一个datetime对象 datetime() dat ...

  7. AbpUser 扩展

    AbpUser表存放的信息比较少,现扩展一下信息 1.在Core层添加UserExtend 类,继承 AbpUser<User>,写入以上各项属性字段,并添加Discriminator 字 ...

  8. 为什么要使用 Go 语言,Go 语言的优势在哪里?

    1.Go有什么优势 可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了. 静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的 ...

  9. 【nginx】 配置域名转发到相同地址不同端口下执行相应业务

    #doctor upstream doc { server 52.**.**.***:8090; } #patient upstream pat { server 52.**.**.***:8088; ...

  10. (转)mysql基础命令

    Sql代码 asc 按升序排列 desc 按降序排列 下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE ...