python 中的分支循环语句
python 中的 if 语句
#让用户输入他的考试成绩,判断成绩,如果超过90分可以得到奖励# 超过80分奖励200# 超过70分奖励100# 其他情况没有奖励score=int(input("请输入你的考试成绩:"))ifscore>90:print("考试超过90分,奖励500块钱!")elifscore>80:print("考试超过80分,奖励200块钱!")elifscore>70:print("考试超过70分,奖励100块钱!")else:print("没有奖励!")嵌套的 if 语句
""" 白羊:0321~0420 天秤:0924~1023 金牛:0421~0521 天蝎:1024~1122 双子:0522~0621 射手:1123~1221 巨蟹:0622~0722 摩羯:1222~0120 狮子:0723~0823 水瓶:0121~0219 处女:0824~0923 双鱼:0220~0320 根据上述描述,在程序中需要用户输入一个 4 位数字 再根据这个数字所处的范围进行判断,其中前两位是月份,后两位是日期 """birthday=input("请输入生日,格式:mmdd")month=int(birthday[0:2])day=int(birthday[2:4])ifmonth>12ormonth<1orday>31orday<1:print("输入错误!重新输入")ifmonth==1:ifday>=21:print("水瓶座")else:print("摩羯座")elifmonth==2:ifday<=19:print("水瓶座")else:print("双鱼座")elifmonth==3:#三元表达式的写法 变量 = 值1 if 条件 else "值2"xingzuo="双鱼座"ifday<=20else"白羊座"print(xingzuo)# .......循环语句
for 循环
# for循环# 需要一个获取数据的集合# 语法""" for 变量 in 集合 print() """fruits={"苹果","鸭梨","香蕉","桔子"}forfruitinfruits:print(f"我喜欢吃{fruit}")# range() 函数 ,生成数字的序列# range(start,end,step) 开始值、结束值、步长# [start,end) 左闭右开foriinrange(10):# [0,9]print(i)print("="*30)foriinrange(5,10):#[5,9]print(i)print("="*30)foriinrange(1,20,2):# 奇数print(i)#求1-100的奇数和print("="*30)sum=0foriinrange(1,100,2):sum+=iprint(f"1-100的和是:{sum}")# 求水仙花数,3位数 个位的三次方+十位三次方+百位三次方=值本身print("="*30)foriinrange(100,1000):# 求出个十百位数g=i%10s=i//10%10b=i//100#判断ifg**3+s**3+b**3==i:print(f"水仙花数是:{i}")while 循环
# while 循环""" while 条件 : 循环代码 """sum=0i=1whilei<=100:sum+=i i+=1print(f"1-100的和是:{sum}")break 、continue 语句 else子句
# break 、continue 语句 else子句print("="*30)foriinrange(1,10):ifi==5:# break #跳出循环,结束循环continue#跳出当次循环,继续下次循环print(i)#else子句 如果循环没有被break中断,就会执行else子句else:print("循环正常结束!")# 如果break执行,这里不执行enumerate\zip 的用法
# enumerate 用来同时获取索引值和对应的值print("="*30)names=["jack","tom","lucy"]forindex,nameinenumerate(names):print(index+1,name)print(f"第{index+1}位的名字是:{name}")# zip 用来同时遍历多个集合print("="*30)names=["jack","tom","lucy"]ages=[20,21,19]forname,ageinzip(names,ages):print(name,age)print(f"{name}的年龄是:{age}")查找大字符串中,小字符串出现的次数
大字符串:“sdjavaksdjhkjfhfsjavaldkfjakljavalksjdfjava”
小字符串: “java”
#查找大字符串中,小字符串出现的次数#大字符串:"sdjavaksdjhkjfhfsjavaldkfjakljavalksjdfjava"#小字符串: "java"# 查找 find()print("="*30)s1="sdjavaksdjhkjfhfsjavaldkfjakljavalksjdfjava"s2="java"#count() 函数,可以直接返回长度# count = s1.count(s2)# print(count)# 先查找大字符串中小字符串的位置count=0#查找索引位置index=s1.find(s2)#不是-1,表示找到了whileindex!=-1:# 统计数量+1count+=1# 从找到的索引+小字符串长度继续往后找index=s1.find(s2,index+len(s2))print(count)函数
函数就是一段组织好的,可以被重复调用执行的功能代码块,用来实现某个功能,可以多次调用
基本用法
""" 函数的声明语法 语法: def 函数名(参数列表) : 代码体 return 返回值 """# 写一个打招呼的函数# def say(name):# return f"你好,{name}"# # 调用函数# # 有返回值需要变量接收# result = say("jack")# print(result)# 没有返回值的方法defshow(name):print(f"你好,{name}")# 调用show("tom")# 多个参数的写法defadd(a,b):returna+b# 调用print(add(2,5.5))# 默认值参数 ,创建函数的可以给参数指定值,不传值就使用默认值defsay(name,greet="你好"):print(f"{greet},{name}")# 调用say("jack")# 你好,jacksay("tom","hello")# hello,tom# 关键字参数,调用的时候可以通过参数名指定# 关键字参数允许不按参数顺序传递,可以自己指定顺序deftest_method1(name,age,gender):returnf"{name},{age},{gender}"# 普通调用。直接按照顺序传值print(test_method1("jack",20,"男"))# 按照参数的名称传值print(test_method1(age=22,name="tom",gender="男"))# 可变长参数 *args# 接受的参数会被打包成一个元组defsum_method(*args):print(args)# 返回元组sum=0foriinargs:# 循环求和,把传进来的参数求和sum+=ireturnsum# 调用函数,并传值result=sum_method(1,2,3,4,5,6)print(result)# 可变关键字参数 ,可以把接受的参数打包位字典# **kwargs,可以传递多个键值对数据 name="jack"defprint_method(**kwargs):print(kwargs)# 返回字典# 循环遍历forkey,valueinkwargs.items():print(f"{key},{value}")# 调用print_method(name="jack",age=20,gender="男")# 组合参数的使用# 可以在函数中,把上面的几种参数的写法组合在一起# 编写顺序: 普通参数 -> *args -> 默认值参数 -> **kwargsdefcomplex_method(a,b,*args,c=10,d=20,**kwargs):print(f"a={a},b={b},args ={args},c={c},d={d},"f"kwargs={kwargs}")# 调用a=1,b=2,args = (3, 4, 5, 6),c=100,d=200,kwargs={'name': 'jack'}complex_method(1,2,3,4,5,6,c=100,d=200,name="jack")lambda 表达式
# lambda函数的创建# lambda函数是一种创建匿名函数的简写方式# lambda 智能包含单个表达式,不能包含语句(比如if、for)# 表示创建一个匿名函数赋值给add这个变量,add可以看作是函数名add=lambdaa,b:a+b result=add(10,20)print(result)# lambda的使用场景,完成字段key的排序students=[{"name":"jack","score":90},{"name":"lisi","score":80},{"name":"tom","score":85}]# 将列表中的数据按照score排序print("排序前:")print(students)# 排序操作stu_sorted=sorted(students,key=lambdaa:a["score"],reverse=False)print("排序后:")print(stu_sorted)# lambda和 map、filter一起使用nums=[1,2,3,4,5,6,7,8]# 把里面的偶数筛选出来#filter 一般用来筛选符合条件的数据evens=list(filter(lambdam:m%2==0,nums))print(evens)# [2, 4, 6, 8]# 将原来列表的数据,全部 ** 2# map一般用来将原来的数据拿到后,继续处理new_nums=list(map(lambdax:x**2,nums))print(new_nums)#[1, 4, 9, 16, 25, 36, 49, 64]# 列表中有5个字符串 hello, java ,world , spring , oracle# 筛选出 包含o,且长度大于5的字符串strs=["hello","java","world","spring","oracle"]new_strs=list(filter(lambdax:len(x)>5and"o"inx,strs))print(new_strs)# 有一个列表中,存了几个学生的分数的字典,""" name:jack,score:90 name:tom ,score:95 name:lucy,score:88 name:amy,score:92 name:suny,score:98 """# 求出所有学生中,前三名的学生姓名stu_list=[{"name":"jack","score":90},{"name":"tom","score":95},{"name":"lucy","score":88},{"name":"amy","score":92},{"name":"suny","score":98}]stu_list1=sorted(stu_list,key=lambdax:x["score"],reverse=True)foriinrange(0,3):print(stu_list1[i].get("name"))函数作用域
# 全局变量 和 局部变量global_var="我是全局变量"defmethod1():local_var="我是局部变量"print(local_var)print(global_var)# 函数中可以读取全局变量#没法直接修改全局变量,需要使用global#global_var = "修改后的值"method1()#print(local_var) # 局部变量不能在函数外面调用#global关键字,可以实现在函数内部修改全局变量counter=0defmethod2():globalcounter# 把全局变量引入函数内部,可以修改counter+=1returncounter#调用函数后获取结果,结果是1print(method2())#直接输出全局变量,全局变量在函数内部被修改了,结果是1print(counter)Python 中的模块和包
模块使用
模块 : 指的是一个包含了 python 代码的 .py 文件,可以通过模块实现导入函数使用
先定义一个 py 文件
#定义几个常用函数的模块# 文件名(不含.py) 就是 模块名# 可以通过import实现模块的导入PI=3.1415defadd(x,y):returnx+ydefsubtract(x,y):returnx-ydefmultiply(x,y):returnx*ydefdivide(x,y):returnx/y另一个文件 中导入使用
fromcom.tongda88.test3importmy_math#导入模块# from 模块名 import 名称# 别名使用 subtract as sub,multiply as mulfrommy_mathimportadd,subtractassub,multiplyasmul,divide#from my_math import * #不常用,可能产生名称冲突# 使用函数print(my_math.PI)print(add(10,20))print(sub(10,20))print(mul(10,20))print(divide(10,20))包的使用
如果一个文件夹中,包含了init.py 文件,就可以看成是一个包,一个包中将来一般会组织多个模块
注意,如果想要包之间的信息互相导入,需要包的同级位置存在init.py
# 写一个阶乘函数defmethod01(n):ifn<=1:return1returnn*method01(n-1)# 写一个字符串反转函数defreverse_str(str):returnstr[::-1]`` ` 系统中包的使用 ```pythonfromtest4.str_demoimportreverse_strfromtest4.math_demoimportmethod01# 使用导入的包中的函数print(reverse_str("hello"))print(method01(5))#常用的标准库模块importos# 操作系统接口文件 文件、目录操作、环境变量print(os.getcwd())# 当前的工作目录print(os.path.join("dir","sbudir","file.txt"))#跨平台安全拼接路径print(os.path.exists("hello.txt"))# 检查目录文件是否存在importsys# 系统相关的参数,标准输入输出importjson# 数据处理,序列化、反序列化data={"name":"jack","age":20}#把python对象转为JSON字符串json_str=json.dumps(data,ensure_ascii=False)print(json_str)#把JSON字符串转为python对象py_object=json.loads(json_str)print(py_object)importdatetime# 日期时间处理 ,日期时间运算now=datetime.datetime.now()#当前时间print(now)importrandom# 随机数 、随机选择、随机打乱num=random.randint(1,10)print(num)importre# 正则表达式 模式匹配、查找替换""" [a] 特定的字母a [a-z] 小写字母 [5] 找5是否存在 [a-z]{3} 任意3个字母 [a]{3} 3个a [a-z]{3,4} 3个或者4个小写字母 \d 任意数字 \w 任意字符 """patten=r"[1][3-9]\d{9}"result=re.search(patten,"13355558988")ifresult:print(f"匹配到的数据:{result.group()}")