009-2018-09-13 函数入门

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
想吃饭了怎么办呢你好橘子我是周星驰

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值