一、函数的初始

比如python没有len()方法,如何求字符串的长度

使用for循环

  1. s = 'fdshfeigjoglfkldsja'
  2. count = 0
  3. for i in s:
  4. count += 1
  5. print(count)

执行输出:

19

列表呢?

  1. li = [1,2,3,'a','b','c','ask']
  2. count = 0
  3. for i in li:
  4. count += 1
  5. print(count)

执行输出:

7

如果是字典呢?

再把上面的代码贴一遍?

以上可以看出2点

1.重复代码多

2.可读性差

写代码,一切以精简为主,避免重复代码。

针对这种情况,出现了函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数的产生:

函数就是封装一个功能的代码片段。

  1. def my_len(li):
  2. #def 关键字 定义一个函数
  3. #my_len 函数名的书写规则与变量一样。
  4. #def 与函数名中间一个空格
  5. #函数名(): 加上冒号(将函数名与函数体隔开),括号是用来传参的。
  6. #函数体 就是函数里面的逻辑代码
  7. count = 0
  8. for j in li:
  9. count += 1
  10. print(count)
  11. my_len('alex is 大笨蛋')

以上就是一个函数

代码是从上至下执行的,执行到def my_len() 时

将my_len这个变量名加载到临时内存中,它不执行。

函数如何执行呢?

函数的执行:函数名 + ()

  1. #执行函数
  2. my_len()

当见到my_len()时,只有见到这个括号(),程序会根据函数名从内存中找到函数体,然后执行它

没有括号,它是不会执行的。

二、函数返回值

写函数,不要在函数中写print()

函数是以功能为导向的,除非测试的时候,才可以写print()

1.在函数中,遇到return结束函数。

  1. def fun():
  2. print(111)
  3. return
  4. print(444)
  5. fun()

执行输出:

111

2.将值返回给函数的调用者。

  1. def fun():
  2. a = 134
  3. return a
  4. print(fun())

执行输出:

123

1.无 return

  1. def fun():
  2. pass
  3. print(fun())

执行输出:

None

2.return None (没有意义)

  1. def fun():
  2. return None
  3. print(fun())

执行输出:

None

3.return 1个值 该值是什么,就直接返回给函数的调用者,函数名()

  1. def fun():
  2. return [1,2,3]
  3. print(fun())

执行输出:

[1, 2, 3]

4.return 多个值 将多个值放到一个元组里,返回给函数的调用者。

  1. def fun():
  2. return 1,2,[33,44],'abc'
  3. print(fun())

执行输出:

(1, 2, [33, 44], ‘abc’)

  1. li = [1,2,3,'a','b','c','ask']
  2. def my_len():
  3. count = 0
  4. for j in li:
  5. count += 1
  6. return count
  7. print(my_len())

执行输出:

7

查看len方法的源码

  1. def len(*args, **kwargs): # real signature unknown
  2. """ Return the number of items in a container. """
  3. pass

pass表示使用C写的

发现my_len()和len()方法,有些类似了。能返回变量的长度了,但是和len()有些区别。len可以传参数,比如len(‘123’)

三、函数的传参

  1. def my_len(l): # l 形式参数,形参
  2. print(l) #实际对应就是a
  3. count = 0
  4. for j in l:
  5. count += 1
  6. return count
  7. a = 'fdsaf'
  8. print(my_len(a)) #括号里面的是实际参数,实参

执行输出:

fdsaf

5

实参角度:

1.位置传参。按顺序,一一对应。

  1. def func(a,b,c):
  2. print(a)
  3. print(b)
  4. print(c)
  5. func('fdsafdas',3,4)

执行输出:

fdsafdas

3

4

如果少一个参数呢?

  1. def func(a,b,c):
  2. print(a)
  3. print(b)
  4. print(c)
  5. func(3,4)

执行报错

TypeError: func() missing 1 required positional argument: ‘c’

必须是一一对应的。

2.关键字传参,不按顺序,一一对应。

  1. def max_min(a,b):
  2. return a if a > b else b
  3. print(max_min(b = 1,a = 3))

执行输出:

3

3.混合传参,关键字参数永远在最后面。

  1. def func1(a,b,c,d,e):
  2. print(a)
  3. print(b)
  4. print(c)
  5. print(d)
  6. print(e)
  7. func1(1,2,c=3,4,5)

执行报错:

SyntaxError: positional argument follows keyword argument

正确的写法

  1. def func1(a,b,c,d,e):
  2. print(a)
  3. print(b)
  4. print(c)
  5. print(d)
  6. print(e)
  7. func1(1,4,d=2,c=3,e=5)

执行输出:

1

4

3

2

5

按照形参角度。

1.位置传参。按顺序,一一对应。

  1. def func(a,b,c):
  2. print(a)
  3. print(b)
  4. print(c)
  5. func('fdsafdas',3,4)

执行输出:

fdsafdas

3

4

2.默认参数。传参则覆盖,不传则默认,默认参数永远在位置参数后面

  1. def func(a,b=666):
  2. print(a,b)
  3. func(1,2)

执行输出:

1 2

  1. def func(a,b=666):
  2. print(a,b)
  3. func(1)

执行输出:

1 666

举一个场景

班主任录入员工信息表

  1. while True:
  2. username = input('请输入姓名: ').strip()
  3. sex = input('请输入性别: ').strip()
  4. with open('name_list',encoding='utf-8',mode='a') as f1:
  5. f1.write('{}\t{}\n'.format(username,sex))

执行输出:

  1. ![](https://cdn.nlark.com/yuque/0/2020/png/1484428/1597368156885-fad189b0-884c-488a-9de6-957f35f53173.png)

强制结束程序

查看文件内容

  1. ![](https://cdn.nlark.com/yuque/0/2020/png/1484428/1597368156765-02f5e763-a357-4b06-8131-c7ff936e8def.png)

有2个问题

第一,男生居多

第二,完成函数功能

修改一下

  1. def Infor_entry(username,sex='男'):
  2. with open('name_list',encoding='utf-8',mode='a') as f1:
  3. f1.write('{}\t{}\n'.format(username,sex))
  4. while True:
  5. username = input('请输入姓名(男生以1开头):').strip()
  6. if '1' in username:
  7. #去除1
  8. username = username[1:]
  9. Infor_entry(username)
  10. else:
  11. Infor_entry(username,'女')

执行输出:

  1. ![](https://cdn.nlark.com/yuque/0/2020/png/1484428/1597368156863-d550273f-1ab2-403c-8cf2-ae95c5b421e5.png)

查看文件

  1. ![](https://cdn.nlark.com/yuque/0/2020/png/1484428/1597368156763-781aeabb-3450-4d6e-a116-70d5969f367d.png)

四、三元运算

三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值

  1. 格式:[on_true] if [expression] else [on_false]

res = 值1 if 条件 else 值2

三元运算只适用于简单的if else判断,再多一层if判断就不适用了。

举例说明:

  1. a =1
  2. b = 2
  3. c= a if a>1 else b #如果a大于1的话,c=a,否则c=b

写一个函数,功能比大小,大者返回

  1. def max_min(a,b):
  2. if int(a) > int(b):
  3. return a
  4. else:
  5. return b
  6. print(max_min(1,3))

执行输出:

3

上面的max_min函数,可以使用三元运算进行简写

  1. def max_min(a,b):
  2. z = a if a > b else b
  3. return z

再进一步简写

  1. def max_min(a,b):
  2. return a if a > b else b

今日作业:

练习题

  1. 练习题
  2. 1、整理函数相关知识点,写博客
  3. 2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
  4. 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5
  5. 4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
  6. 5、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。
  7. 6、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
  8. 7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
  9. dic = {"k1": "v1v1", "k2": [11,22,33,44]}
  10. PS:字典中的value只能是字符串或列表
  11. 8、写函数,接收两个数字参数,返回比较大的那个数字。
  12. 9、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。
  13. 10、写一个函数完成三次登陆功能,再写一个函数完成注册功能(进阶)
  14. 明日默写:
  15. ①,return的作用。
  16. ②,传参的几种方法,每个都简单写一个代码。
  17. 如,实参,按位置传参。
  18. def func(x,y):
  19. Pass
  20. func('a','b')

答案:

2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。

2.1 先写一个列表,输出索引

  1. data = [1,2,3,4,5]
  2. for i in range(len(data)):
  3. print(i)

执行输出:

0

1

2

3

4

2.2 判断索引为奇数,打印出来

  1. data = [1,2,3,4,5]
  2. for i in range(len(data)):
  3. if i % 2 == 1:
  4. print(data[i])

执行输出:

2

4

2.3将结果追加到新列表中

  1. data = [1,2,3,4,5]
  2. li = []
  3. for i in range(len(data)):
  4. if i % 2 == 1:
  5. li.append(data[i])
  6. print(li)

执行输出:

[2, 4]

2.4封装成函数,传入列表和元组

  1. def odd_number(data):
  2. li = []
  3. for i in range(len(data)):
  4. if i % 2 == 1:
  5. li.append(data[i])
  6. return li
  7. #传入一个列表
  8. li_1 = [1,2,3,4,5]
  9. print(odd_number(li_1))
  10. #传入一个元祖
  11. li_2 = ('a','b','c','d')
  12. print(odd_number(li_2))

执行输出:

[2, 4]

[‘b’, ‘d’]

第二种写法:

  1. def func1(argv):
  2. return argv[1::2]
  3. print(func1([1,2,3,4]))

只有一行,可以缩写,优化代码:

  1. def func1(argv):return argv[1::2]
  2. print(func1([1,2,3,4]))

3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。

3.1 定义一个字符串,使用len()判断长度是否大于5

  1. obj = 'fdskfie'
  2. if len(obj) > 5:
  3. print(True)
  4. else:
  5. print(False)

执行输出:

True

3.2 封装成函数

  1. def compare(obj):
  2. if len(obj) > 5:
  3. return True
  4. else:
  5. return False
  6. obj = 'fdskfie'
  7. print(compare(obj))

执行输出:

True

3.3代码精简

  1. def compare(obj):
  2. return True if len(obj) > 5 else False
  3. obj = 'fdsk'
  4. print(compare(obj))

执行输出:

False

3.4 传入的对象(字符串、列表、元组)

  1. def compare(obj):
  2. return True if len(obj) > 5 else False
  3. str_obj = 'fdsk'
  4. print(compare(str_obj))
  5. list_obj = [1,2,3,4,5,6]
  6. print(compare(list_obj))
  7. tuple_obj = ('g','k','e','w')
  8. print(compare(tuple_obj))

执行输出:

False

True

False

第二种写法,因为它是一个不等式,结果就是True或者False

  1. def func2(argv):
  2. return len(argv) > 5
  3. print(func2('fdsfs'))

4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

4.1判断列表长度是否大于2,返回切片

  1. li = [1,2,3,4]
  2. if len(li) > 2:
  3. print(li[:2])

执行输出:

[1, 2]

4.2封装成函数

  1. def list_slicing(li):
  2. if len(li) > 2:
  3. return li[:2]
  4. li = [1, 2, 3, 4]
  5. print(list_slicing(li))

执行输出:

[1, 2]

5、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。

5.1使用for循环遍历,并判断类型输出

  1. data = '1 3a &% '
  2. for i in data:
  3. if i.isdigit():
  4. print('数字为: {}'.format(i))
  5. elif i.isalpha():
  6. print('字母为: {}'.format(i))
  7. elif i.isspace():
  8. print('空格为: {}'.format(i))
  9. else:
  10. print('其他为: {}'.format(i))

执行输出:

数字为: 1

空格为:

数字为: 3

字母为: a

空格为:

其他为: &

其他为: %

空格为:

5.2 增加计数功能

  1. data = '1 3a &% '
  2. #个数统计
  3. digit = 0
  4. letter = 0
  5. space = 0
  6. other = 0
  7. for i in data:
  8. if i.isdigit():
  9. digit += 1
  10. elif i.isalpha():
  11. letter += 1
  12. elif i.isspace():
  13. space += 1
  14. else:
  15. other += 1
  16. print('数字个数为: {}'.format(digit))
  17. print('字母个数为: {}'.format(letter))
  18. print('空格个数为: {}'.format(space))
  19. print('其他个数为: {}'.format(other))

执行输出:

数字个数为: 2

字母个数为: 1

空格个数为: 3

其他个数为: 2

5.3优化输出

  1. data = '1 3a &% '
  2. #个数统计
  3. digit = 0
  4. letter = 0
  5. space = 0
  6. other = 0
  7. for i in data:
  8. if i.isdigit():
  9. digit += 1
  10. elif i.isalpha():
  11. letter += 1
  12. elif i.isspace():
  13. space += 1
  14. else:
  15. other += 1
  16. #格式化输出
  17. layout = '''
  18. 数字个数为: {}
  19. 字母个数为: {}
  20. 空格个数为: {}
  21. 其他个数为: {}
  22. '''
  23. print(layout.format(digit,letter,space,other))

执行程序,效果同上。

5.4 封装成函数

  1. def counta(data):
  2. # 个数统计
  3. digit = 0
  4. letter = 0
  5. space = 0
  6. other = 0
  7. for i in data:
  8. if i.isdigit():
  9. digit += 1
  10. elif i.isalpha():
  11. letter += 1
  12. elif i.isspace():
  13. space += 1
  14. else:
  15. other += 1
  16. # 格式化输出
  17. layout = '''
  18. 数字个数为: {}
  19. 字母个数为: {}
  20. 空格个数为: {}
  21. 其他个数为: {}
  22. '''
  23. return layout.format(digit, letter, space, other)
  24. data = '1 3a &% '
  25. print(counta(data))

执行输出:

数字个数为: 2

字母个数为: 1

空格个数为: 3

其他个数为: 2

老师的代码:

  1. def func4(argv):
  2. dic = {'digit':0,'aplha':0,'space':0,'other':0}
  3. for i in argv:
  4. if i.isdigit():
  5. dic['digit'] += 1
  6. elif i.isalpha():
  7. dic['aplha'] += 1
  8. elif i.isspace():
  9. dic['space'] += 1
  10. else:
  11. dic['other'] += 1
  12. return '数字{},字母{},空格{},其他{}'.format(dic['digit'],dic['aplha'],dic['space'],dic['other'])
  13. print(func4('fdsf 224&&3Tdw ~!wift4t4ttd f'))

执行输出:

数字6,字母16,空格4,其他4

6、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。

6.1用一个变量,使用for循环遍历每一个元素,判断是否为空格

  1. data = '13a &%'
  2. for i in data:
  3. # 判断内容是否为空
  4. if i == ' ':
  5. print('对象含有空格')
  6. else:
  7. print('对象没有空格!')

执行输出:

对象没有空格!

对象没有空格!

对象没有空格!

对象含有空格

对象没有空格!

对象没有空格!

6.2 使用标志位

  1. data = '13 a&%'
  2. for i in data:
  3. # 判断内容是否为空
  4. if i == ' ':
  5. flag = True
  6. break
  7. else:
  8. flag = False
  9. if flag:
  10. print('对象含有空格!')
  11. else:
  12. print('对象没有空格')

执行输出:

对象含有空格!

6.3 封装成函数

  1. def contain_space(data):
  2. for i in data:
  3. # 判断内容是否为空
  4. if i == ' ':
  5. flag = True
  6. break
  7. else:
  8. flag = False
  9. if flag:
  10. return '对象含有空格!'
  11. else:
  12. return '对象没有空格'
  13. data = '13a&%'
  14. print(contain_space(data))

执行输出:

对象含有空格!

6.4代码优化

  1. def contain_space(data):
  2. for i in data:
  3. # 判断内容是否为空
  4. if i == ' ':
  5. flag = True
  6. break
  7. else:
  8. flag = False
  9. return '对象含有空格!' if flag else '对象没有空格'
  10. data = '13 a&%'
  11. print(contain_space(data))

执行输出:

对象含有空格!

7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

dic = {“k1”: “v1v1”, “k2”: [11,22,33,44]}

PS:字典中的value只能是字符串或列表

7.1遍历字典,并判断values如果大于2,进行切片

  1. dic = {"k1": "v1v1", "k2": [11,22,33,44]}
  2. for k,v in dic.items():
  3. if len(v) > 2:
  4. #切片
  5. v = v[:2]
  6. print(v)

执行输出:

v1

[11, 22]

7.2修改values值

  1. dic = {"k1": "v1v1", "k2": [11,22,33,44]}
  2. for k,v in dic.items():
  3. if len(v) > 2:
  4. #切片
  5. v = v[:2]
  6. #修改values的值
  7. dic[k] = v
  8. print(dic)

执行输出:

{‘k1’: ‘v1’, ‘k2’: [11, 22]}

7.3封装成函数

  1. def dictionary(dic):
  2. for k,v in dic.items():
  3. if len(v) > 2:
  4. #切片
  5. v = v[:2]
  6. #修改values的值
  7. dic[k] = v
  8. return dic
  9. dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]}
  10. print(dictionary(dic))

执行输出:

{‘k1’: ‘v1’, ‘k2’: [11, 22]}

老师的代码:

  1. def func7(argv):
  2. for i in argv:
  3. argv[i] = argv[i][:2]
  4. return argv
  5. dic = {"k1": "v1v1", "k2": [11, 22, 33, 44]}
  6. print(func7(dic))

执行输出,效果同上

8、写函数,接收两个数字参数,返回比较大的那个数字。

老师讲过,直接贴代码

  1. def max_min(a,b):
  2. return a if a > b else b
  3. print(max_min(5,8))

执行输出:

8

9、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。

9.1 把今天早上的默认的代码贴过来

  1. import os
  2. with open('log.txt',encoding='utf-8') as f1,\
  3. open('log.bak',encoding='utf-8',mode='w') as f2:
  4. for i in f1:
  5. new_i = i.replace('alex', 'SB')
  6. f2.write(new_i)
  7. os.remove('log.txt')
  8. os.rename('log.bak','log.txt')

9.2封装成函数

  1. '''
  2. path 文件路径(此文件python能够找到),比如log
  3. content 需要修改的内容,比如aa
  4. modify 要替换的内容,比如bb
  5. '''
  6. def file_replace(path, content, modify):
  7. import os
  8. with open(path, 'r', encoding='utf-8') as f1, \
  9. open(path + '2', encoding='utf-8', mode='w') as f2:
  10. print(path+'2')
  11. for i in f1:
  12. new_i = i.replace(content, modify)
  13. f2.write(new_i)
  14. os.remove(path)
  15. os.rename(path + '2', path)

9.3新建一个文件log.txt,内容如下:

  1. 人生苦短,我想学python

9.4执行函数

  1. file = 'log.txt'
  2. content = 'Python'
  3. modify = 'python(最好的语言)'
  4. file_replace(file,content,modify)

9.5查看文件内容

  1. ![](https://cdn.nlark.com/yuque/0/2020/png/1484428/1597368156880-b9653525-1437-480d-8e4b-992a2ad1d20c.png)

10、写一个函数完成三次登陆功能,再写一个函数完成注册功能(进阶)

10.1将上次写的三次登录代码贴过来

  1. username = 'xiao'
  2. password = '123'
  3. max = 3
  4. i = 0
  5. while i < max:
  6. i += 1
  7. name = input('请输入用户名:')
  8. pwd = input('请输入密码:')
  9. if name == username and pwd == password:
  10. print('登陆成功')
  11. break
  12. else:
  13. print('用户名或密码错误,还剩余{}次机会!'.format(max-i))

10.2将用户名与密码存储到字典中,修改登录程序

  1. users = [
  2. {'username':'zhangsan','password':'123'},
  3. {'username':'lisi','password':'123'},
  4. ]
  5. max = 3
  6. count = 0
  7. while count < max:
  8. count += 1
  9. name = input('请输入用户名:').strip()
  10. pwd = input('请输入密码:').strip()
  11. for i in users:
  12. username = i['username']
  13. password = i['password']
  14. #判断用户名和密码
  15. if name == username and pwd == password:
  16. print('登陆成功')
  17. #设置标志位
  18. flag = True
  19. break
  20. else:
  21. print('用户名或密码错误,还剩余%s次机会!' % (max-count))
  22. flag = False
  23. #判断标志位,跳出循环
  24. if flag:
  25. break

10.3执行输出:

  1. ![](https://cdn.nlark.com/yuque/0/2020/png/1484428/1597368156939-a1009947-53ed-4a75-9752-4bd3c4d056e9.png)

10.4封装成函数

  1. users = [
  2. {'username':'zhangsan','password':'123'},
  3. {'username':'lisi','password':'123'},
  4. ]
  5. def login():
  6. max = 3
  7. count = 0
  8. while count < max:
  9. count += 1
  10. name = input('请输入用户名:').strip()
  11. pwd = input('请输入密码:').strip()
  12. for i in users:
  13. username = i['username']
  14. password = i['password']
  15. #判断用户名和密码
  16. if name == username and pwd == password:
  17. print('登陆成功')
  18. return True
  19. else:
  20. print('用户名或密码错误,还剩余%s次机会!' % (max-count))
  21. return False
  22. print(login())

10.5执行输出:

  1. ![](https://cdn.nlark.com/yuque/0/2020/png/1484428/1597368156873-bee9a051-a5c4-4968-b72c-55b165a53342.png)

10.6写一个注册功能

  1. def register():
  2. while True:
  3. reg_user = input('请输入注册用户名: ').strip()
  4. reg_pwd1 = input('请输入登录密码: ').strip()
  5. reg_pwd2 = input('请再次确认密码: ').strip()
  6. #判断2次密码是否一致
  7. if reg_pwd1 == reg_pwd2:
  8. #加入到用户列表中
  9. users.append({'username':reg_user,'password':reg_pwd1})
  10. return '注册成功!您注册的用户名为:{}\n登录密码为: {}'.format(reg_user,reg_pwd1)
  11. else:
  12. print('2次密码输入不一致,请重新输入!')
  13. return False

10.7执行注册函数

  1. #执行注册
  2. print(register())
  3. #打印用户列表
  4. print('\n')
  5. print('当前用户列表'.center(20,'*'))
  6. for i in users:
  7. print('{}\t{}\t{}'.format(users.index(i)+1,i['username'],i['password']))
  8. print(''.center(20,'*'))

10.8执行输出:

  1. ![](https://cdn.nlark.com/yuque/0/2020/png/1484428/1597368156764-cc4aa23c-c95b-47b2-8578-3b054d53a93b.png)

完整代码如下:

  1. users = [
  2. {'username':'zhangsan','password':'123'},
  3. {'username':'lisi','password':'123'},
  4. ]
  5. def login():
  6. max = 3
  7. count = 0
  8. while count < max:
  9. count += 1
  10. name = input('请输入用户名:').strip()
  11. pwd = input('请输入密码:').strip()
  12. for i in users:
  13. username = i['username']
  14. password = i['password']
  15. #判断用户名和密码
  16. if name == username and pwd == password:
  17. print('登陆成功')
  18. return True
  19. else:
  20. print('用户名或密码错误,还剩余%s次机会!' % (max-count))
  21. return False
  22. def register():
  23. while True:
  24. reg_user = input('请输入注册用户名: ').strip()
  25. reg_pwd1 = input('请输入登录密码: ').strip()
  26. reg_pwd2 = input('请再次确认密码: ').strip()
  27. #判断2次密码是否一致
  28. if reg_pwd1 == reg_pwd2:
  29. #加入到用户列表中
  30. users.append({'username':reg_user,'password':reg_pwd1})
  31. return '注册成功!您注册的用户名为:{}\n登录密码为: {}'.format(reg_user,reg_pwd1)
  32. else:
  33. print('2次密码输入不一致,请重新输入!')
  34. return False
  35. #执行登录
  36. #print(login())
  37. #执行注册
  38. print(register())
  39. #打印用户列表
  40. print('\n')
  41. print('当前用户列表'.center(20,'*'))
  42. for i in users:
  43. print('{}\t{}\t{}'.format(users.index(i)+1,i['username'],i['password']))
  44. print(''.center(20,'*'))

老师的部分代码:

  1. def register(*args,**kwargs):
  2. flag = True
  3. while flag:
  4. username = input('请输入注册的用户名:').strip()
  5. with open('register_msg',encoding='utf-8') as f1:
  6. for i in f1:
  7. li = i.strip().split() # [张三,123]
  8. if username == li[0] or username == '' :
  9. print('用户名已存在,请重新注册')
  10. break
  11. else:
  12. password = input('请输入您注册的密码:')
  13. with open('register_msg',encoding='utf-8',mode='a') as f2:
  14. f2.write('\n{}\t{}'.format(username,password))
  15. print('注册成功')
  16. return
  17. register()
  18. def login(*args,**kwargs):
  19. pass
  20. login()

明日默写

①,return的作用

1.在函数中,遇到return结束函数。

2.将值返回给函数的调用者。

②,传参的几种方法,每个都简单写一个代码

如,实参,按位置传参。

def func(x,y):

Pass

func(‘a’,’b’)

1.位置传参。按顺序,一一对应

  1. def func(a,b):
  2. print(a)
  3. print(b)
  4. func(3,4)

2.关键字传参,不按顺序,一一对应

  1. def max_min(a,b):
  2. return a if a > b else b
  3. print(max_min(b = 1,a = 3))

3.混合传参,关键字参数永远在最后面

  1. def func1(a,b,c):
  2. print(a)
  3. print(b)
  4. print(c)
  5. func1(1,4,c=3)

4.默认参数,传参则覆盖,不传则默认

def func(a,b=666):
    print(a,b)
func(1,2)