Python 3 学习笔记(三)----数据运算、集合操作和文件操作

一、数据运算

算数运算:

赋值运算:

比较运算:

身份运算:

成员运算:

逻辑运算:

位运算:

运算符优先级:

二、集合操作

 集合是一个无序的、不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合的时候就已经自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集的关系
 1 print("-----------关系测试-------------")
 2 list_A = [1,3,5,7,7,8,9]
 3 list_A = set(list_A) #将列表转化为集合
 4 list_B = set([0,2,4,5,6,8,9])
 5 print(list_A,type(list_A))  #集合会自动的去重
 6 
 7 print(list_A,list_B)
 8 
 9 #交集
10 print(list_A.intersection(list_B))
11 print(list_A & list_B)
12 
13 #并集
14 print(list_B.union(list_A))
15 print(list_B | list_A)
16 
17 #差集
18 print(list_A.difference(list_B))  #在list_A中有,但是list_B中没有
19 print(list_A - list_B)
20 
21 #子集
22 print(list_A.issubset(list_B)) #判断list_B是否为list_A的子集
23 print(list_A.issuperset(list_B))  #判断list_A是否为list_B的父集
24 
25 #对称差集
26 print(list_A.symmetric_difference(list_B)) #取两个集合中互相都没有的
27 print(list_B ^ list_A)
28 
29 list_C = set([22,33,44])
30 print(list_B.isdisjoint(list_C)) #判断两个集合是否不相交,如果不相交返回为True
 1 print("---------集合操作-----------")
 2 list_A.add(444)  #添加数值
 3 list_B.add("hahaha")   #添加字符串
 4 print(list_B,list_A)
 5 list_C.update(([66,77,88]))  #批量添加
 6 print(list_C)
 7 
 8 list_A.remove(444) #删除指定的项
 9 list_A.pop()  #随机删除list_A中的一个项
10 list_A.discard(999)  #用discard删除一个不存在的项不会报错,用remove删除不存在的项会报错
11 print(list_A)
12 
13 3 in list_A  #测试3是否为list_A的成员。列表、元组、字典、集合都是这种操作

三、文件操作

文件的读与写:

 1 f = open("地狱少女","r",encoding="UTF-8")   #r代表read表示读取、w代表write表示写入(新建、覆盖)、a代表append表示追加
 2 data = f.read()
 3 data2 = f.read()
 4 
 5 print(data)
 6 print("--------------",data2)   #此处data2打印为空是因为第一次打印data的时候已经重头度到尾,data2打印从尾开始所以没有数据
 7 
 8 f.close()  #关闭文件
 9 
10 
11 f1 = open("地狱少女1","w",encoding="UTF-8")   #write是创建一个新文件,如果打开的文件名没有的话就新建一个,如果已有的话就覆盖
12 f1.write("因为要消除怨恨,
所以要流放别人到地狱")
13 print(f1)
14 
15 f1.close()
16 
17 
18 f2 = open("地狱少女","a",encoding="UTF-8")   #append只能追加不能read
19 f2.write("因为要消除怨恨,
所以要流放别人到地狱")
20 print(f2)
21 
22 f2.close()

文件的常用操作:

 1 #f = open("地狱少女","r",encoding="UTF-8") #文件句柄
 2 #print(f.readline())    #readline为按行读取
 3 #print(f.readline())
 4 
 5 
 6 #读取前五行的数据
 7 #for i in range(5):
 8 #    print(f.readline())
 9 
10 
11 #print(f.readlines()) #将文件转换为一个列表
12 
13 
14 f = open("地狱少女","r",encoding="UTF-8") #文件句柄
15 print(f.tell())  #查找当前指针所在位子,这个位子是字符所在的位子
16 print(f.read(5)) #读取5个字符,一般不用,因为不知道结束时语句是否完整
17 f.seek(0)  #使指针回到起始位置
18 print(f.isatty())  #判断是否为一个终端设备
19 print(f.seekable())  #判断指针是否能够返回原位
20 print(f.readable())   #判断文件是否可读
21 print(f.writable())   #判断文件是否可写
22 
23 print(f.flush())   #强制刷新(在一些对于时效性很强的情况下使用,例如取款程序)
24 
25 #print(f.truncate(10)) 是截断,如果不写相当于清空,输入数字代表从头开始第10个字符开始截断。truncate只适用于"append"

文件修改:

 1 f = open("地狱少女","r+",encoding="UTF-8")   #r+为读写,先读后写,常用
 2 
 3 print(f.readline())
 4 print(f.readline())
 5 print(f.readline())
 6 print(f.tell())
 7 f.write("------------------------------")
 8 print(f.readline())
 9 
10 
11 f = open("地狱少女1","w+",encoding="UTF-8")    #w+为写读,先写后读,先创建一个文件再读,不常用
12 
13 f.write("----------------------------1
")
14 f.write("----------------------------1
")
15 f.write("----------------------------1
")
16 print(f.tell())
17 f.seek(10)
18 print(f.readline())
19 f.write("I am Irlo.")    #这里的写入也是添加到最后一行
20 f.close()
21 
22 f = open("地狱少女1","a+",encoding="UTF-8")    #a+为追加读,不常用
23 '''
24 
25 #f = open("地狱少女","rb")    #二进制文件读,网络传输只能用二进制模式
26 f = open("地狱少女2","wb")   #二进制文件写
27 f.write("Hello Irlo
".encode())

with语句:

 1 #f = open("车","r",encoding="UTF-8")
 2 
 3 with open("","r",encoding="UTF-8") as f:   #用with打开文件执行后会自动关闭,避免打开文件忘记关闭
 4 #print(f.readline())
 5 for line in f:
 6   print(line.strip())
 7 
 8 
 9 #python2.7之后with可以同时打开多个文件
10 with open("123","r",encoding="UTF-8") as f1,open("456","r",encoding="UTF-8") as f2:
11     pass
12 
13 ###python的开发规范:一行代码不要超过80个字符,所以这里一般书写为
14 with open("123","r",encoding="UTF-8") as f1,
15      open("456","r",encoding="UTF-8") as f2: #可清晰看出打开两个文件

例1.循环打印直到第10行停止,修改第十行数据后继续打印

老方法(不推荐):

1 f = open("地狱少女","r",encoding="UTF-8") #文件句柄
2 
3 
4 for index,line in enumerate(f.readlines()):  #f.readlines 需要先转换成列表,效率低有局限性,只有在小文件的情况下使用
5     if index == 9:
6         print("-------------------")
7         continue
8     print(line.strip())   #strip会去掉空格和换行

不占内存的方法:

 1 f = open("地狱少女","r",encoding="UTF-8") #文件句柄
 2 
 3 count = 0
 4 for line in f:          #迭代器,内存中只保存一行的数据
 5     if count == 9:
 6         print("-----------------")        #"-------"代替了第十行的数据
 7         count +=1
 8         continue
 9     print(line)
10     count +=1

例2. 进度条

1 import sys,time
2 
3 for i in range(15):
4     sys.stdout.write("#")   #stdout是标准输出,一般指输出到显示器上
5     sys.stdout.flush()
6     time.sleep(0.1)

附件.地狱少女

 1 怨恨:
 2 在地狱少女(第一季)第八集,柴田一尝试登入“地狱通信”而失败,可见“地狱通信”的登入是有条件的。而从不同集数中大部分成功登入的人,都有着一个比较相似的共通点,在故事中称为“怨恨”。怨恨程度如何往往是影响着故事发展的关键因素之一,但是动画中“怨恨”定义不明。以下是分类整理。
 3 因陷害而致的怨恨:
 4 有一些人因为被人陷害,例如地狱少女(第一季)第三集的受诅人花笠守将委托人岩下大辅之好友杀死,却把杀人的责任推到岩下大辅,[14]于是岩下大辅有所怨恨,要流放受诅人。
 5 因为重要他人被伤害引致的怨恨:
 6 于地狱少女(第一季)第四集中,就有委托人心爱之狗被医生延误诊治、间接害死。之后一集,就是因为委托人父亲被杀,才有流放地狱一事。在动画中,委托人心伤时有时也展示出其与重要的人事感情深厚的表现,以说明其重要性。
 7 因为满足个人欲望而引发怨恨:
 8 例如第一季第七集,委托人红彩花(同时是受诅人)为了得到遗产,就要流放养母到地狱。二笼二十四集委托人甚至清楚说明流放别人就是为满足欲望。
 9 因为“背叛”而引致的怨恨:
10 受诅人的怨恨也是影响着故事的发展。在地狱少女(第一季)第九集中,受诅人因为委托人姐姐“背叛”了自己,于是便陷害委托人姐姐和委托者,引发委托人的“怨恨”。不过“背叛”未必容易理解。似乎在故事中的说法是,一方不接受另一方的感情,导致对方怨恨。另见第一季第二集的受诅人,情况类似。
11 为了他人利益而导致怨恨:
12 为了不让其他人损失权益,如财产、生命,而把受诅人送进地狱,这种怨恨完全取自于委托人的个人良心和感同身受。如二笼第十六集,委托人为了不让其他人像她一样,被受诅人欺骗、陷害致死,再临死前解开红线,将受诅人送入地狱,但随后死亡,蜡烛熄灭。
13 因为不明原因而引致的怨恨:
14 有时候故事中未必展示出一些被认为是招人怨恨之事,例如在地狱少女第一季第二十三集中,受诅人(一名女护士)所展示的就只有好的一面,但是从受诅人流放到地狱、及“地狱通信”所言“我们将为你消除怨恨”中,可以看到,在故事中而言“怨恨”被消除了。这种“怨恨”虽然依故事所言是存在着,却缺乏有力的前因去理解它为何存在。
15 与一般理解可能不同的怨恨:
16 一般对怨恨的概念是包含憎恶情绪的,在故事中却未必时时认同此概念,有时甚至是相反。如第一季第十二集中,委托人和受诅人互相原谅和体谅对方,照一般理解就应该无所怨恨,委托人却流放对方到地狱;二笼第二十集中,受诅人主动帮助委托人解开红线,就是为了陪伴对方进入地狱。
17 因多管闲事而被怨恨:
18 当一个人担心对方想帮他解决事情,但对方要求不要多管闲事,但对方却硬要帮忙而导致被对方怨恨。如三鼎第七集中,受诅人看不惯委托人母亲不负责任的行为。以同学身份劝委托人说出来并打算告诉老师,委托人要求对方不要多管闲事,但受诅人还是坚持要管。然而委托人为了保护这个“看似不幸的幸福”而选择流放受诅人。
19 为了封口而怨恨:
20 为了要保护自己的名声或利益,理应会对伤害自己的人而怨恨才对,但有时是为了封口,甚至连曾对自己好的人而怨恨。三鼎第14集中,委托人因为别人恶意流放自己和受诅人并行的亲蜜谣言,但委托人只是受到对方的好心帮助而成为朋友。起初委托人是要流放恶意散拨照片的人,但却不知该对象的名子。之后发现受诅人因犯罪而被逮捕,为了不让谣言扩大而选择流放曾帮助过自己的受诅人。
21 须要说明的是,故事中的怨恨未必只是上述一种意义而已,有时可能是多种的混合。

 附件.车

 1 洛天依《车》
 2 有一块方向盘
 3 却总在左摇右晃
 4 这两根安全带
 5 挡不住遍体鳞伤
 6 透明般的车窗
 7 看不清内心所想
 8 这就是 车的一生
 9 
10 有洪亮的喇叭
11 却没有想说的话
12 有明亮的目光
13 看不见路边鲜花
14 星星为我导航
15 却不知我要去哪
16 这就是 车的一生
17 
18 我动荡的雨刷
19 避不开风吹雨打
20 舒适的皮座驾
21 不是任何人的家
22 内心燃烧爆炸
23 对外尽量不喧哗
24 这就是 车的一生
25 
26 藏着唱片几盒
27 不知我想听的歌
28 与你共赴山河
29 独处时安静沉默
30 远看车载着你
31 近看是你开着车
32 这就是 我的一生
33 
34 我洪亮的喇叭
35 替你说想说的话
36 我动荡的雨刷
37 遮挡你风吹雨打
38 至少在这路上
39 请把这里当做家
40 请珍惜 你的一程
41 交给你 我的一生
原文地址:https://www.cnblogs.com/consort/p/7309703.html