Python_Onlineh_Hmework(基础篇,持续更新中...)
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(基础篇,持续更新中...)的更多相关文章
- Pig语言基础-【持续更新中】
***本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.*** Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的, ...
- nodejs基础【持续更新中】
简介 Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-dr ...
- Java基础——集合(持续更新中)
集合框架 Java.util.Collection Collection接口中的共性功能 1,添加 booblean add(Object obj); 往该集合中添加元素,一次添加一个 boolea ...
- Java基础——多线程(持续更新中)
如何建立一个执行路径呢? 通过查询API文档 java.lang.Thread类 该类的描述中有创建线程的两种方式 1.继承Thread类 (1).将类声明为 Thread 的子类 (2).该子类应重 ...
- Linux 基础命令 持续更新中...
1.ls 显示当前文件/文件夹 显示文件大小: ls -lh 显示隐藏文件: ls -a 显示文件详细信息: ls -l (ll)2.pwd 显示当前所在路径 cat 显示当前文件下所有内容3.cd ...
- Python开发【第二十三篇】:持续更新中...
Python开发[第二十三篇]:持续更新中...
- 前端深入之js篇丨Array数组操作从入门到成神Up Up Up,持续更新中
写在前面 随着前端深入的不断学习,发现数组这个数据结构在前端中有着相当大的存在感,由于我初学前端的时候并没有系统性的学习数组,所以我将通过这篇文章同你一起学习数组,希望我们能一起进步,学会熟练操作数组 ...
- Pig基础学习【持续更新中】
*本文参考了Pig官方文档以及已有的一些博客,并加上了自己的一些知识性的理解.目前正在持续更新中.* Pig作为一种处理大规模数据的高级查询语言,底层是转换成MapReduce实现的,可以作为MapR ...
- 《WCF技术剖析》博文系列汇总[持续更新中]
原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...
- 史上最全的spark面试题——持续更新中
史上最全的spark面试题——持续更新中 2018年09月09日 16:34:10 为了九亿少女的期待 阅读数 13696更多 分类专栏: Spark 面试题 版权声明:本文为博主原创文章,遵循C ...
随机推荐
- Acwing-96-奇怪的汉诺塔(递推)
链接: https://www.acwing.com/problem/content/description/98/ 题意: 汉诺塔问题,条件如下: 1.这里有A.B.C和D四座塔. 2.这里有n个圆 ...
- JPA的常用Annotation
http://www.blogjava.net/zJun/archive/2007/01/24/95747.html @transient 忽略该方法 一. @Entity:通过@Entity注解将一 ...
- 【转】linux中fork()函数详解
原文链接:http://blog.csdn.net/jason314/article/details/5640969#comments 总结:面宝P268 fork()的意思是进程从这里开始分叉,分成 ...
- GooFlow
目前的下载网址:基于JQUERY的WEB在线流程图设计器GOOFLOW 0.7版
- Codeforces Round #303 (Div. 2) D. Queue 水题贪心
题目: 题意:给你n个数值,要求排列这个序列使得第k个数值的前K-1个数的和>=第k个数值的个数尽可能多: #include <iostream> #include <cstd ...
- python实现一个层次聚类方法
层次聚类(Hierarchical Clustering) 一.概念 层次聚类不需要指定聚类的数目,首先它是将数据中的每个实例看作一个类,然后将最相似的两个类合并,该过程迭代计算只到剩下一个类为止,类 ...
- phoenix-hbase 使用
建表命令 CREATE TABLE IF NOT EXISTS "person_mul"( "ROW" varchar primary key, //主键,必须 ...
- springboot+mybatis 使用事务
一.一些概念 声明式的事务管理是基于AOP的,在springboot中可以通过@Transactional注解的方式获得支持,这种方式的优点是: 1)非侵入式,业务逻辑不受事务管理代码的污染. 2)方 ...
- AOI 设计
http://blog.csdn.net/zhanghefu/article/details/25833535 云风的Blog 并进行整理而写. AOI(Area Of Interest),中文就是感 ...
- mysql 判断时间 语法
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW ...