一、数据运算
算数运算:
赋值运算:
比较运算:
身份运算:
成员运算:
逻辑运算:
位运算:
运算符优先级:
二、集合操作
集合是一个无序的、不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合的时候就已经自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集的关系
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("因为要消除怨恨,\n所以要流放别人到地狱") 13 print(f1) 14 15 f1.close() 16 17 18 f2 = open("地狱少女","a",encoding="UTF-8") #append只能追加不能read 19 f2.write("因为要消除怨恨,\n所以要流放别人到地狱") 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\n") 14 f.write("----------------------------1\n") 15 f.write("----------------------------1\n") 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\n".encode())
例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 须要说明的是,故事中的怨恨未必只是上述一种意义而已,有时可能是多种的混合。