1.今日内容大纲
一. 昨日内容回顾 文件操作 f = open(文件路径, mode="模式", encoding="编码") mode: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b r, w, a b 操纵的是字节. 处理非文本文件 r+ 又读又写 with open(...) as f : 文件操作相应的代码 seek()移动光标 开头:seek(0) 结尾:seek(0, 2) tell() 获取光标所在位置 truncate() 截断文件 二. 作业讲解 三. 今日主要内容 神马是函数 函数: 对功能或者动作的封装 函数的定义 def 函数名(形参列表): 函数体(return) ret = 函数名(实参列表) 函数的返回值 return,只要执行到return 函数的本次调用就会被停止 1.如果函数不写return, 没有返回值。 接收到的是None 2.写了return。 return后面什么都不写或者return后面的是None. 返回None 3.return 一个值。 返回一个结果 4.return 值,值,值 返回多个值。结果是元组 函数的参数(一部分) 参数:函数在调用的时候给函数传递的信息 形参: 在函数声明的位置的变量 实参: 在函数调用的时候给出的具体的值 传参: 把实参赋值给形参的过程 分类: 实参: 1. 位置参数. 按照位置给形参传递信息 2. 关键字参数. 按照形参的名字给参数传递信息 3. 混合参数. 先位置后关键字 形参: 1. 位置参数 2. 默认值参数, 必须写在位置参数后面 3. 动态参数 (预习, *args, **kwargs)
2.昨天难点
f = open("疙瘩汤", mode="r+", encoding="utf-8")
# s = f.read(1) # 不管读多少.写依然是在末尾
# f.seek(0) # 移动到开头
# f.write("刘伟")
# f.seek(0,2) # 移动到末尾
# f.write("周星驰")
print(f.writable())
print(f.readable())
f.close()
3.练习
'''
day8作业及默写
1,有如下文件,a1.txt,里面的内容为:
老男孩是最好的培训机构,
全心全意为学生服务,
只为学生未来,不为牟利。
我说的都是真的。哈哈
分别完成以下的功能:
a,将原文件全部读出来并打印。
b,在原文件后面追加一行内容:信不信由你,反正我信了。
c,将原文件全部读出来,并在后面添加一行内容:信不信由你,反正我信了。
d,将原文件全部清空,换成下面的内容:
每天坚持一点,
每天努力一点,
每天多思考一点,
慢慢你会发现,
你的进步越来越大。
e,将原文件内容全部读取出来,并在‘我说的都是真的。哈哈’这一行的前面加一行,‘你们就信吧~’然后将更改之后的新内容,写入到一个新文件:a1.txt。
2,有如下文件,t1.txt,里面的内容为:
葫芦娃,葫芦娃,
一根藤上七个瓜
风吹雨打,都不怕,
啦啦啦啦。
我可以算命,而且算的特别准:
上面的内容你肯定是心里默唱出来的,对不对?哈哈
分别完成下面的功能:
a,以r+的模式打开原文件,判断原文件是否可读,是否可写。
b,以r的模式打开原文件,利用for循环遍历文件句柄。
c,以r的模式打开原文件,以readlines()方法读取出来,并循环遍历 readlines(),并分析b,与c 有什么区别?深入理解文件句柄与 readlines()结果的区别。
d,以r模式读取‘葫芦娃,’前四个字符。
e,以r模式读取第一行内容,并去除此行前后的空格,制表符,换行符。
f,以r模式打开文件,从‘风吹雨打.....’开始读取,一直读到最后。
g,以a+模式打开文件,先追加一行:‘老男孩教育’然后在从最开始将 原内容全部读取出来。
h,截断原文件,留下内容:‘葫芦娃’
3,文件a.txt内容:每一行内容分别为商品名字,价钱,个数。
apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3
通过代码,将其构建成这种数据类型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。
4,有如下文件:
alex是老男孩python发起人,创建人。
alex其实是人妖。
谁说alex是sb?
你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
将文件中所有的alex都替换成大写的SB(文件的改的操作)。
5,文件a1.txt内容(升级题)
name:apple price:10 amount:3 year:2012
name:tesla price:100000 amount:1 year:2013
.......
通过代码,将其构建成这种数据类型:
[{'name':'apple','price':10,'amount':3},
{'name':'tesla','price':1000000,'amount':1}......]
并计算出总价钱。
6,文件a1.txt内容(升级题)
序号 部门 人数 平均年龄 备注
1 python 30 26 单身狗
2 Linux 26 30 没对象
3 运营部 20 24 女生多
.......
通过代码,将其构建成这种数据类型:
[{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},
......]
明日默写:
就是第4题的代码(课上讲过)。
'''
f = open("火锅", mode="r", encoding="utf-8")
result = []
for line in f: # name:apple price:10 amount:3 year:2012
lst = line.split() # ['name:apple', 'price:10', 'amount:3', 'year:2012']
dic = {}
for el in lst: # 'name:apple'
dic[el.split(":")[0]] = el.split(":")[1]
result.append(dic)
print(result)
4.函数
# while 1:
# print("拿出手机")
# print("打开陌陌")
# print("找一找心怡的对方.")
# print("出来吃吃饭")
# print("唱唱歌")
# print("跳跳广场舞")
#
# print("吃饭")
# 函数是对功能或者动作的封装
# 函数的定义:
# def yue():
# print("拿出手机")
# print("打开陌陌")
# print("找一找心怡的对方.")
# print("出来吃吃饭")
# print("唱唱歌")
# print("跳跳广场舞")
#
# # 函数的调用: 函数名()
# yue()
# print("回家休息休息")
# yue() # 动作就可以在任何时候, 在任何位置, 进行访问
# 当函数执行之后。可以给调用者一个返回值
# def yue(): # 参数
# print("拿出手机")
# print("打开陌陌")
# print("找一找心怡的对方.")
# print("出来吃吃饭")
# print("唱唱歌")
# print("跳跳广场舞")
# return "小姐姐", "小护士", "广场舞大妈"
# # return "小姐姐" # return表示返回。 这个函数在调用之后会得到一个结果
# ret = yue() # 当函数有返回值的时候。 我们可以不接受返回值
# print(ret)
# 在函数中如果不写return 表示函数没有返回值。调用方接收到的是None
# return 可以终止一个函数的运行
# 在函数中写了return。 但是return后面不跟值, 表示函数没有返回值。 接受的是None。
# 在函数中写return。 return后面跟一个值
# 在函数中写return。 return 后面可以跟上多个值, 表示返回多个值。 接收方收到的是元组
# # 形参
# def yue(tools): # 在函数声明的位置。 给出来的参数叫形参。 形式上的一个参数. 用一个变量来表是
# print("拿出手机")
# print("打开%s" % tools)
# print("找一找心怡的对方.")
# print("出来吃吃饭")
# print("唱唱歌")
# print("跳跳广场舞")
#
# # 实参
# # 在函数调用的时候。把实参的值赋值给形参的过程叫传参
# yue("微信") # 在函数调用的地方给出的具体的值。 参数叫实参. 实际参数
# yue("陌陌")
# yue("探探")
# def chi(good_food, no_good_food, drink):
# print("我要吃",good_food, no_good_food, drink)
#
# # chi("大米饭", "冰峰", "炸鸡")
# # chi(drink="哇哈哈", no_good_food="薯条", good_food="盖浇饭")
# chi("小米饭", "辣条", drink="可乐")
# chi(drink="可乐", "小米饭", "辣条")
def regist(name,sex="男", age=18): # 语法上不允许
print(name, age, sex)
regist("刘伟", 22)
regist("李铁帅", 27)
regist("高晓燕", 18, "女")
regist("李铁帅", 27)
regist("李铁帅", 27)
regist("李铁帅", 27)
regist("李铁帅", 27)
regist("李铁帅", 27)
# 实参的分类:
# 1. 位置参数. 按照位置。 给形参赋值
# 2. 关键字参数. 按照形参的名字给参数赋值
# 3. 混合参数, 位置参数必须放在前面。 关键字参数放后面
# 形参的分类(3大类)
# 1. 位置参数 按照位置来声明形参
# 2. 默认值参数, 当给参数传递值的时候。 默认值不起作用, 不给值。 默认值起作用. 保证你至少有个值能用
# 顺序: 位置参数必须放在前面。 默认值参数必须放在后面
# 函数:对功能或者动作的封装
# 登陆验证
# def login(username, password):
# if username == 'alex' and password == "123":
# return True
# else:
# return False
#
# # 使用场景
# name = input("请输入你的账号:")
# pws = input("请输入你的密码:")
# if login(name, pws):
# print("进入刘伟的空间")
# else:
# print("用户名或密码错误, 请重新登陆!")
# f(x) = x + 1
# f(3) = 3 + 1 = 4
# def f(x):
# return x + 1
# print(f(2))
#
# s = "你好啊我叫塞利亚"
# print(len(s))
#
# def my_len(s):
# count = 0
# for el in s:
# count+=1
# return count
# print(my_len(s))
5.其他
name:apple price:10 amount:3 year:2012 name:tesla price:100000 amount:1 year:2013
想吃饭了怎么办呢你好橘子我是周星驰