04-python
def dcs31(): print('dcs31 is number one')
# 第一种调用方法
dcs31() # 运行结果:dcs31 is number one
# 第二种调用方法
if __name__ == '__main__': #有个调试代码作用 一个.py文件如果自身在运行,那么他的__name__值等于__mian__,就执行下面代码
dcs31()
1.定义一个函数且带单个参数的
举例1 def test01(name): print('%s去深圳赚钱'%(name))
test01('小张') 小张为实际参数,name是形式参数,实际参数传给形式参数,传入的参数只能是一个,如果大于一个或者不传会报错
2.定义一个函数且带多个参数的
举例2 def test01(name,where): print('%s去%s赚钱'%(name,where)) test01('小张','深圳') 多个形式参数按照顺序传给形式参数,传入的实际参数不能少于也不能多余形式参数,否则报错
3.定义一个函数且带有默认参数
举例3 def test01(name,where='北京'): print('%s去%s赚钱' % (name, where)) test01('小张','深圳') 当函数带有默认参数值时,调用的时候可以不给默认值参数,默认参数取默认值 当函数带有默认值参数时,调用的时候可以给默认值参数传入值,输出结果为传入的值,不输出默认值 注意:默认值参数一定要放在后面,否则报错
4.定义一个可变长参数的可变长元组
举例4 def test01(*name): print(name) print(type(name)) test01('dcs31','baoan31') 形参中的*会将实参全部接收,然后存储以元组的形式,再把元组赋值给*后面的参数,注意:参数可以为空
举例4-1 user_name=('zhangsan','lisi','wanger') def test01(*name): print(name) print(type(name)) test01(*user_name) 传入的实际参数是一个序列时需要加*号
举例4-2 user_name=['北京','深圳'] def test01(name,*where,age=25): print(name) print(where) print(age) test01('小程',*user_name,age=30) 当有位置参数、默认参数、可变长元组时,去调用的时候位置参数一定要在可变长参数前面,默认值可以不传 当自定义函数同时有位置参数和默认值参数和可变长元组时,同时传参的时候默认值参数需要写参数名=值
5.定义一个可变长参数中的可变长字典
dict1={'name':'xiaoliu','age':19} dict2={'score':89,'mathroe':90} def test01(**num): print(num) test01(**dict1,**dict2)
传入多个字典使可变长字典合并为一个字典
def test01(**num): print(num) test01(name='xiaohong',age=18,score=87)
可变长参数字典传入的实际参数可以是一个键值对的形式
dict1={'name':'xiaoliu','age':19} def test01(*name,**num): print(num) print(name) test01('zhangsan','lisi',**dict1)
可变长元组和可变长字典同时出现,可变长字典需要放在可变长元组后面
6.函数中的变量
6-1、函数中也可以设置变量,在函数中定义变量被称之为局部变量,局部变量只是定义的函数内部有效
6-2、在函数体之外定义变量。我们称之为为全局变量
举例 num1=200 #全局变量 def test1(): num1=300 #局部变量 print(num1+100) test1() #打印的是局部变量的num1的值 400 print(num1) #打印全局的num1 200
当函数内部变量名是在以一次出现且出现在等号前面,不论全局变量是否用到该变量名,函数都使用函数中的局部变量
举例2 num1=200 def test1(): sum1=num1+100 print(sum1) test1() 当函数内部变量名如果是在等号后面,且第一次出现,则这里引用全局变量
举例3 num1=200 def test1(): global num1 num1=300 sum1=num1+100 print(sum1) test1() #结果:400 print(num1) #结果:300 在函数中将某个变量定义为全局变量时需要使用关键字global 声明成一个全局变量,原有的全局变量的值会被覆盖
7.python中return 返回值
def test01(): num1=200 score=num1/100 test01() #空没有值 print(test01()) #None def test01(): num1 = 200 score=num1/100 # print(score) return score #将score的结果返回给到函数调用处,谁调用了这个函数就能拿到score的值 # print(score) #一旦函数碰到return就是直接把结果返回去,return后面的代码不会被执行 test01() print(test01()) #运行结果:2.0
8.函数的传递
编写一个求平均分的函数,然后根据平均分判断是否是一个优秀学生
def avg(): num1=600 score=num1/6 return score # print(score) avg() def is_good_student(): values=avg() #赋值给到values变量 # print(values) if values>80: print('优秀学生') else: print('不是优秀学生') is_good_student() #第一种调用 if __name__ == '__main__': #第二种调用 avg() is_good_student()
1、需求:登录银行系统并显示余额,有两个功能第一个是登录,第二个是登录后显示余额,先登录然后根据登录是否成功然后是否显示余额。
分析思路:如果想查询到余额,前提必须登录,所以现在我们用两个函数来处理,第一个函数实现登录,第二个函数实现余额查询,调用第一个函数得
到的结果给第二个函数,然后第二个函数根据结果进行代码处理。
def login(): name=input('请输入您的账号:') if name=='admin': pwd=input('请输入您的密码:') if pwd=='123456': return '登录成功' else: return '密码错误,登录失败' else: return '用户名错误请重新输入!' def test01(): values=login() if values=='登录成功': print('您的余数为100万') elif values=='密码错误,登录失败': print('密码错误请重新输入!') else: print('用户名错误请重新输入') if __name__ == '__main__': test01()
2、先定义一个字典存放的用户名和密码,dict1={'amdin':123456,'dcs31':654321}
要求如下:
1-1 :从字典中获取用户完成登入,登入时判断用户是否存在,存在直接登入(密码输入错误时提示密码输入错误请重新输入)
1-2:如果输入的登入用户判断不存在字典中,则调用注册方法,完成注册(注册时输入密码需要确认两次是一致,否则提示两次输入密码不一致请重新输入)
注册成功后写入字典中
dict1={'admin':'123456','dcs31':'654321'} 定义登录函数 def login(): username=input('请输入您的用户名:') if dict1.__contains__(username): #判断输入用户名是否在列表中 pwd=input('请输入您的密码:') if pwd==dict1[username]: print('登录成功') else: print('您输入的密码有误请重新输入!') else: print('您输入的账号不存在请注册用户名!') register() def register(): newusername=input('请输入您要注册的用户名:') if dict1.__contains__(newusername): print('您输入的用户名已存在请重新输入!') register() else: newpwd1=input('请输入您的密码:') newpwd2=input('请再次输入密码:') if newpwd1==newpwd2: print('注册成功') dict1.setdefault(newusername,newpwd2) print(dict1) else: print('两次输入的密码不一致请重新输入!') if __name__ == '__main__': login()
3.用递归的方法求出n阶乘? 列如:4的阶乘为4*3*2*1(用递归函数:在函数的内部调用函数本身)
def func(n): if n==0 or n==1: return 1 else: return n*func(n-1) #调用函数本身 print(func(5))
9.字符串格式化输出函数format():是一种格式化输出字符串函数,该函数增强了字符串格式化的功能
基本语法:通过{}来代替以前%,{}代表占位符
9-1:举例 name='lisi' where='深圳' print('{}去{}'.format(name,where)) #不设置指定位置,按默认顺序
9-2:举例 name='lisi' where='深圳' print('{1}去{0}'.format(name,where)) #可以设置指定索引位置输出 print('{0}{1}去{1}{0}'.format(name,where)) #format函数里面的参数可以通过索引重复取值,运行结果:lisi深圳去深圳lisi
9-3:举例 name='lisi' where='深圳' print('{0}去{1}'.format(where,name,'age')) #fromat函数里面的参数个数可以大于{}占位符个数,取值按照占位符的索引取
9-4:举例 a='{name}去{where}'.format(name='lisi',where='深圳') #设置参数输出 print(a)
9-5:举例 list1=['lisi','深圳','广州'] a=('{0[0]}去{0[2]}'.format(list1)) #大括号里面的0代表的列表,中括号里面的0和1代表是列表元素对应的索引 print(a) #lisi去广州
9-6:举例 占位符{}里面必须要丢入参数不然报错 list1=['lisi','深圳','广州'] a=('{0}去{0}'.format(list1)) #大括号里面的0代表的列表,中括号里面的0和1代表是列表元素对应的索引 print(a) #运行结果:['lisi', '深圳', '广州']去['lisi', '深圳', '广州']
9-7:举例 同时可以对两个列表进行格式化输出 list1=['北京','深圳','广州'] list2=['lisi','zhangsan'] a=('{1[0]}去{0[1]}'.format(list2,list1)) #输出结果:北京去zhangsan print(a)
9-8:举例 对字典进行格式化输出 dict1={'name':'lisi','where':'深圳'} a=('{0[name]}去{0[where]}'.format(dict1)) #0代表就是字典本身,在通过dict1[name]取出该键的值 print(a) #输出结果:lisi去深圳
9-9:举例 对多个字典机型格式化输出 dict1={'name':'lisi','where':'深圳'} dict2={'name':'zhangsan','where':'广州'} a=('{0[name]}去{1[where]}'.format(dict1,dict2)) print(a) #输出结果:lisi去广州
10.zip函数:用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组
然后返回有这些元组组成的列表,如果各个迭代器元素个数不一致,则返回列表长度与最短的对象相同
list1=['北京','深圳','广州'] list2=['lisi','zhangsan'] test1=zip(list1,list2) test1=list(test1) #转化列表 print(test1) #结果:[('北京', 'lisi'), ('深圳', 'zhangsan')] dict1=dict(test1) #转化为字典 print(dict1) #{'北京': 'lisi', '深圳': 'zhangsan'} zip方法在python2和python3的不同点:python3中为减少内存,zip()返回是一个对象,需要展示列表或者字典需要手动转化
11、python中open函数和with open函数
11-1 读模式:r
file1=open(r'D:\python\dcs31\test','r',encoding='utf8') print(file1.read()) #通过file1对象调用read方法读取文件所有内容且字符串形式返回 print(file1.readline()) #通过file1对象调用readline方法读取文件首行内容且字符串形式返回 print(file1.readlines()) #通过file1对象调用readlines方法读取文件首行内容且列表形式返回 a=file1.readlines() print(a) #['duoceshi\n', 'baoan31'] print(a[2]) #取列表的索引值 输出结果:hello print(a[1:]) #切片取列表第二个元素后的所有 输出结果:['baoan31\n', 'hello\n'] for i in a[1:]: print(i,end='') #baoan31 hello
11-2:写的模式 :w
file1=open(r'D:\python\dcs31\test','w',encoding='utf8') print(file1.write('1宝安31班')) #将内容写入到文件里面且会覆盖原有的内容 返回的是字符的个数 print(file1.write('1')) #write接受的参数必须是str,如果是int需要加引号 file1.close()
11-3: 写的模式(追加):a
file1=open(r'D:\python\dcs31\test','a',encoding='utf8') print(file1.write('hello')) #在文件内容末尾追加 print(file1.write('\nhello')) #再追加的内容前换行 print(file1.writelines('username')) #在追加内容返回为一个对象且在内容末尾追加 file1.close()
11-4:with open 函数,用with open语句好处,就是到达语句末尾时,会自动关闭文件,即便出现异常
with open(r'D:\python\dcs31\test','r',encoding='utf8') as f: #取别名为f # print(f.read()) # print(f.readline()) with open(r'D:\python\dcs31\test', 'a', encoding='utf8') as f: print(f.write('duoceshi31'))