python-6

命名空间和作用域

# 我们程序启动的一瞬间做了什么事



# 还有为什么程序启动的一瞬间这些都能用
# print()   input()   len()   加()就可以调用

# def my_len():
#
#     pass
# my_len()

# print()  len()
# 开始执行之后
# a=1
# b=2
# def func():
#     name='gusu'
# print(a,b)
# print(name)
#
#
# def func2():
#     age=18



# 总结:
# 永远是局部命名空间可以用 全局的变量    全局命名空间可以用内置命名空间的变量,但是内置的不能用全局的,全局的不能用局部的
# 命名空间:
#         内置命名空间:放的源码print  len    inptu等等
#         全局命名空间:定义在函数外部的所有变量
#         局部命名空间:定义在函数内部的所有变量
#
# 作用域:
#     全局作用域:内置命名空间,全局命名空间
#     局部作用域:内置命名空间,全局命名空间,局部命名空间

# 记住:使用的时候的特点:永远优先用局部的,没有局部用全局,没有全局永内置
#
# 如果我在全局,内置,局部都有,用谁的? 用自己的
# len=1880
# # print(len)
#
# def func():
#     print(len)
# func()

函数嵌套

# def func1():
#     print('hello')
#
# def fun2():
#     print('start')
#     func1()
#     print('stop')
# fun2()



# 在局部可以查看,但不能修改,修改就报错了,想要引用也是可以的,但是不能直接在函数内部修改全局空间的值
# a=1
# def func():
#     a+=1
#     print(a)
# func()
# print(a)


# 如果非要改,global  关键字可以修改全局变量的值但是容易造成代码的安全隐患
# 第一种:
# a=1
# def func():
#     global a
#     a+=1
#     print(a)
# func()
# print(a)
#
# 第二种
# a=1
# def func():
#
#     return a+1
#
# func()
# print(func())


# nonlocal   关键字
# a=18


# def func():
#     a=20
#
#     def func2():
#         nonlocal a
#         print(a)
#     func2()
#     print(a)
# func() 

文件操作

# dic={
#     'admin':'123456'
#     'user2':'6666'
# }
# dic['老王']='110'



# open---打开
#绝对路径:从磁盘的根目录开始一直到文件名
#相对路径:在同一个文件夹下的文件,如果在同一个文件夹中,则相对路径就是这个文件名,如果在上一层,则要../
# open('userinfo',mode='r')  #相对路径打开   r相当于读
# open()

# print('\n')
# print('\\n') 取消\斜杠的转义,\\,或者在路径前面加r
#windowns 操作系统默认gbk

# f是一个文件句柄,所有和文件相关的操作都要依赖f,也可以叫文件操作符
# f=open('userinfo.py',mode='r',encoding='utf-8')相对    mode='r'不加也可以
# f=open(r'D:\APP\Python\tcl\file\day5\info1.py',mode='r',encoding='utf-8')绝对路径
# print(f.read())  #读取全部信息,encoding依次读所有,文件有多大,占多大内存都一次性读出来
# print(f.readline()) #一次只读一行的文件,依次向下读,但不知道在哪里结束


#admin|123456\n   读取的文件背后是有空格的
# for line in f: #既能够一行一行的读,又可以读完之后自动停止
#     line=line.strip()    #去空格
#     if line:print(line)   #如果还有内容就打印出来

# f.close()  #关闭文件


# f=open('D:\APP\Python\tcl\file\day5\info1.py',mode='r',encoding='utf-8')
# print(f.readline())
# f = open('..\day5\info1.py', mode='r', encoding='utf-8')
# print(f.read())
# for line in f:
#     line=line.strip()
#     if line:print(line)

# f = open('..\day5\info1.py', mode='r', encoding='utf-8')
# print(f.write('今天天气不错'))   #以写的方式打开一个已经存在的文件,相当于先清空原来的文件


# f1=open('haha',mode='r',encoding='utf-8')#以写的方式打开一个不存在的文件,相当于新建了一个空文件
# f1.write('老王|2131\n')
# f1.write('老李|2421\n')
# f1.close()


# 文件的追加   mode='a'
# f1=open('haha',mode='a',encoding='utf-8')
# f1.write('老孙|来啦\n')
# f1.close()


# 以字节的形式读写   'rb'  后面不要加utf_8
# f=open('视频名称','rb')
# print(f.read())   #读取慢,因为视频大了

# # 视频文件不能用for循环读
#
# f=open('视频名称','rb')
# print(f.read(1024))
# 1024=1kb      #指定字节每次读多少
#
# # 我不知道文件有多大,不知道要读多久
# import os
# size=os.path.getsize(''视频名称'相对路径')
# print(size)  #返回的是字节数
#
#
# 通过while循环读取视频
# f=open('视频名称','rb')  读取
# while size>1024:
#     content=f.read(1024)
#     print(content)
#     size-=1024
# else:
#     content=f.read(size)
#     print(content)
#
#
# 复制视频
# f=open('视频名称','rb')   文件写入
# f1=open('复制视频.mp4','wb')
# while size>1024:
#     content=f.read(1024)
#     f1.write(content)
#     size-=1024
# else:
#     content=f.read(size)
#     f1.write(content)
#
# f.close()
# f1.close()




# f=open('谷苏.MP4','rb')
# print(f.read(1024))
# 1024=1kb

# import os
# size=os.path.getsize('谷苏.MP4')
# print(size)
#
# f=open('谷苏.MP4','rb')
# f1=open('复制谷苏.mp4','wb')
# while size>1024:
#     content=f.read(1024)
#     f1.write(content)
#     # print(content)
#     size-=1024
# else:
#     content=f.read(size)
#     # print(content)
#     f1.write(content)
#
# f.close()
# f1.close()


# r+ 模式   读写
# f3=open('userinfo.py',mode='r+',encoding='utf-8')
# print(f3.read())
# f3.write('小伙子\n')
# f3.close()

# 坑
# 默认情况下,光标在文件的开头,一般是先读后写才是安全的
# f3.write('小姑娘\n')
# print(f3.read())
# f3.close()


# w+
# f3=open('userinfo.py',mode='w+',encoding='utf-8')
# f3.write('今天天气')
# f3.seek(0)    #移动光标到开头去
# print(f3.read())
# f3.close()


#文件的指针
# 我们在读文件的时候,有个东西在记录我们读的位置,实际上就是文件的指针
# 在每次读取数据的时候,都是文件的指针在记录当前文件读到哪一个位置上了
# seek(n)  光标移动到n的位置,移动单位是byte(字节),所以如果是utf-8的中文部分,中文是3字节
# seek(0) 移动到头
# seek(0,2)移动到结尾,seek的第二个参数表示是从哪个位置开始进行偏移
# 默认是0,表示开头,1表示当前位置,2表示结尾
# tell()是计算光标读过之前的字节的长度
# f5=open('userinfo.py',mode='r',encoding='utf_8')
# conent=f5.read()
# print(conent)
# f5.seek(0)
# conent2=f5.readline()
# print(conent2)
# print(f5.tell())
# f5.close()
#
# readline(-1)  查看第一行全部信息,可以指定位置


# 文件的修改    先读取源文件,修改文件,新建一个新文件,把数据传到新的文件中,然后删除源文件,并且将新文件命名成旧文件
import os
f=open('info1.py',encoding='utf_8')
f2=open('c.txt',mode='w',encoding='utf-8')
for line in f:
    us,pwd=line.split('|')
    if us=='admin':
       pwd='777\n'
    f2.write('|'.join([us,pwd]))
f.close()
f2.close()
os.remove(r'info1.py')
os.rename(r'c.txt',r'info1.py')








# import os
# with open('haha',encoding='utf-8')as f, open('a.txt',mode='w',encoding='utf-8')as f2:
#     for line in f:
#         us,pwd=line.split('|')
#         if us=='老李':
#             pwd='666\n'
#         f2.write('|'.join([us,pwd]))
# os.remove(r'haha')
# os.rename(r'a.txt',r'haha')

作业

# 1.有字符串 "k:1|k1:2|k2:3|k3:4" 处理成字典 {'k':1,'k1':2....}
# str = "k:1|k1:2|k2:3|k3:4"
# str_lst = str.split('|')
#
# dic1 = {}
# for i in str_lst:
#     key, value = i.split(':')
#     dic1[key] = int(value)
# print(dic1)


# 2.写函数,检查传入字典的每一个value长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者
# dic = {"k1":"v1v1","k2":[11,22,33,44]}
# dic = {"k1":"v1v1","k2":[11,22,33,44]}
# def a(c):
#     b = {}
#     for key, value in c.items():
#         if len(value) > 2:
#             b[key] = value[0:2]
#         else:
#             b[key] = value
#     return b
# d = a(dic)
# print(d)


# 3.有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
# 即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}

# li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
#
# dic = {'k1': [], 'k2': []}
# for i in li:
#     if i == 66: continue
#     if i > 66:
#         dic['k1'].append(i)
#     else:
#         dic['k2'].append(i)
# print(dic)


# 4.修改文件内容,把文件中的张三都替换成SB
# 文件内容如下
# wind|123
# 张三|456
# 人才|678
# import os
# f = open('userinfo', encoding='utf-8')
# f1 = open('b.txt',mode='w', encoding='utf-8') # 会覆盖之前的文本
# for line in f:
#     username,pwd = line.split('|')
#     print(username,pwd)
#     if username == '张三':
#         username = 'SB'  # sb赋值给username
#     f1.write('|'.join([username,pwd]))
# f.close()
# f1.close()
# os.remove(r'userinfo')
# os.rename(r'b.txt',r'userinfo')


# 5.文件a.txt内容:每一行内容分别为商品名字,价钱,个数,求出本次购物花费的总钱数
# apple 10 3
#
# tesla 100000 1
#
# mac 3000 2
#
# lenovo 30000 3
#
# chicken 10 3

# with open('a.txt', encoding='utf-8')as f:
#     sum_n = 0
#     for line in f:
#         if line.strip():
#             name, price, count = line.split(' ')
#             sn = int(price) * int(count)
#             sum_n = sum_n + sn
#     print(sum_n)

# 6.定义一个函数,传入一个字典和字符串,判断字符串是否为字典中的值,如果字符串不在字典中,
# 则把字符串当做key,value自定义添加到字典中,并返回新的字典

# 例子
def add(dic, str_1):
    if str_1 not in dic:
        dic[str_1] = '亚索'
    return dic


r = add({'易大师': '剑圣', '蛮三刀': '蛮子'}, '托儿索')
print(r)

# 7.定义函数:(要求:定义函数处理逻辑。input输入操作在函数之外。)
# 将用户输入的所有数字相乘之后对20取余数,返回结果.用户输入的数字个数不确定,
# 例如:用户输入 66,88,100,1,2 等等
# num = input('请输入数字:')
# def func(str_num):
    # print(str_num)
    # my_lst = str_num.split(',')
    # print(my_lst)
#     nice = 1
#     for i in str_num:
#         if i.isdigit():
#             nice *= int(i)
#     return nice % 20
# ret=func(num)
# print(ret)
# 8.一个足球队在寻找年龄在15岁到22岁的女孩做拉拉队员(包括15岁和22岁)加入。编写一个程序,询问用户的性别和年龄,
# 然后显示一条消息指出这个人是否可以加入球队,询问10次后,输出满足条件的总人数。
# (要求:定义函数处理逻辑。但是input输入操作在函数之外。在for循环当中,调用input和自己定义的函数)
# def func(sex, age):
#     num = 0
#     if sex == '女':
#         if 15 <= int(age) <= 22:
#             num += 1
#             print('恭喜你可以加入战队')
#             return num
#         else:
#             print('抱歉,你的年龄不符合')
#     else:
#         print('抱歉,你的性别不符合')
# sum = 0
# for i in range(10):
#     sex = input('请输入孩子的性别:')
#     age = input('请输入孩子的年龄:')
#     ret = func(sex, age)
#     if ret:
#         sum += ret
# print('一共有{}人符合要求,可以加入啦啦队'.format(sum))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值