python第二天:进制、字符串、列表、集合、字典常用方法
2017-05-09 11:02 明月照花眠 阅读(193) 评论(0) 收藏 举报课前回顾
作业出现的问题
1.变量名不规范:不要使用中文、abc、str1等作为变量名,会显得很low,而且代码长了以后也不利于记忆。
2.有的缩进不使用TAB键:一般规范就是使用tab键进行缩进,这样的话既规范又省事。
3.continue/break使用不规范:continue和break都是针对当前循环的。
上课内容
内容概要
进制、基本数据类型(整数、布尔值、字符串、列表、元组、字典、集合)、for循环语while循环、文件操作。
进制
数据存储在电脑中是使用0101010的二进制方式来保存的。而字符编码的话会用到字节,一字节是8位。可以用8个2进制数来表示,或者2个十六进制数来表示。
十进制的意思就相当于是逢10进一,所以单个位上最大的数字是9。其他的进制也是同理可得。
python中有十进制与其他进制互相转化的函数:
二进制:10→2(bin),2→10(int(‘1001001’,2))
八进制:10→8(oct),8→10(int(‘12375321’,8))
十六进制:10→16(hex),16→10(int(‘ff’,16))
总结:
1.硬盘上保存数据,是以二进制的形式保存。
2.读取的话,是把二进制根据对应编码进行转换。
3.用户看到的内容一般有两种,一种是看到的字符串,一种是以十六进制展示的01010101。
数据类型
数据类型在python中的表现就是各个大类,我们在声明变量的时候,就会根据变量数据的规则,自动初始化。这样这个变量就作为了这个大类的一个实例。
每个数据类型都有自己的方法,而这些方法都是保存在类的里面,随着实例的调用再去内存中开辟空间。这样的话比较节省空间。
是否可变、哈希
哈希就是将数据通过某些哈希函数转化为数字的过程。而数据类型的是否可变,主要是能不能对原数据进行操作(增加、删除、修改)。如果可以操作的话,就认为是可变数据类型,不能操作的话就认为是不可变数据类型。
不可变数据类型是可哈希的必要条件,而不是充分条件。如果不可变数据类型的数据中的元素是可变的数据类型,那么这个数据也是不可哈希的。
在数据的操作中,主要是集合元素的判断和字典key的判断要判断是否可哈希。
字符串
字符串的方法在str类里面。调用的时候直接变量名后面接.即可。
按照pycharm默认顺序来进行方法的整理及示例如下:
1.index/find:查找子序列、字符在字符串中第一个出现的位置的索引。使用Index方法的话,如果没有找到会直接报错。用find方法,没有找到会返回值-1。
name = "adbdeghrh"
#下面两个返回的结果都是2
print(name.index("b"))
print(name.index("bd"))
2.count:查找子序列、字符在字符串中出现的次数。
name = "alexwualexsiereric"
print(name.count("alex"))
2
3.lower/upper:这两个方法是对原字符串进行小写/大写处理以后重新输出。不会改变原字符串,会生成一个新的字符串。
name = "AleZ" print(name.upper()) #ALEZ print(name.lower()) #alez
4.split:以指定的字符、子序列为分隔符分割字符串,生成一个列表。
name = "alexwualexsiereric"
print(name.split("alex"))
['', 'wu', 'siereric']
5.replace:用新的子序列\字符替换原有的子序列\字符串,可以指定次数。
name = "alexwualexsiereric"
print(name.replace("alex","lijie",1))
lijiewualexsiereric
6.startswith/endswith:
判断字符串是否以指定的子序列/字符开头或者是结尾。是的话返回True,不是的话返回False。
name = "alexwualexsiereric"
print(name.startswith("alex")) #True
print(name.startswith("lijie")) #False
print(name.endswith("eric")) #True
7.strip:去除字符串前后的指定字符,如果不传参数,默认去除换行符、制表符、空格。
name = " AleZ "
print(name.strip("Z A")) #le
8.format/format_map:字符串格式化输出。一般有两种方式。format_map和format的区别是前者传的是字典。
name = "my name is {0},my age is {1}".format("liuyi","12")
name = "my name is {name},my age is {age}".format(name="liuyi",age=15)
9.isspace:判断字符串是否全部为空格,如果全是就返回True,如果有非空格的元素就返回False。
str1 = " " print(str1.isspace()) #True
10.isdecimal:判断字符串是否是纯数字组成,就是可以用int进行类型转换的。
str1 = "2332321" print(str1.isdecimal())
11.isdigit:判断字符串是否由数字组成,可以识别特殊符号。
str1 = "233②21" print(str1.isdigit())
12.isprintable:判断字符串输出是否全部可见,是返回True,不是返回False。像/t,/n就属于输出不可见。
13.isupper/islower:判断字符串是否为全部大写/小写,是的话返回True,不是的话返回False。
str1 = "ALEX" print(str1.isupper()) str1 = "alex" print(str1.islower())
14.rjust/ljust:指定一块指定长度,将字符串左对齐/右对齐,剩余的部分使用指定的字符串来进行填充。
str1 = "233②21\t2" print(str1.ljust(40,"-")) 233②21 2-------------------------------- print(str1.rjust(40,"-")) --------------------------------233②21 2
15.join:拼接字符串,循环取后面参数的元素,在两两个元素之间加上主体,然后拼接成一个新的字符串。
list = ["alex","gangniang","wusir","haifeng"]
print("搞".join(list))
alex搞gangniang搞wusir搞haifeng
16.partition:以特定的子序列或者字符将字符串分割成有3个元素的列表,3个元素分别是:分隔符前的字符串、分隔符、分隔符后的字符串。
17.maketrans/translate:这两个方法分别是创建一个映射关系,然后使用这个映射关系对字符串进行操作。字符串的长度必须一致,因为他们的映射关系是一一对应的。
name = "alexwualexsiereric"
tran = name.maketrans("ale","bsc")
result = name.translate(tran)
bscxwubscxsicrcric
18.center:指定一段长度,将字符串主体居中,两边都用指定的字符填充。
str1 = '欢迎来到草榴' print(str1.center(50,"-")) ----------------------欢迎来到草榴----------------------
19.lstrip/rstrip:和strip方法差不多,l是只清除左边的,r是要清除右边的。
20.expandtabs(n):用来制表来对齐。\t和前面的字符串加起来占n个空格的位置。例外:一个字母和一个汉字占的宽度不一样,但是还是都按照一个空格来进行替换。
21.isidentifier:判断字符串能不能作为变量名使用。但是无法判断是否是那些已经被使用的关键字(class、if、while等)
22.captialize:将字符串的首字母变成大写。
23.encode:进行字符串转化。
小结:
常用功能:upper,lower,split,find,strip,startswith,format,replace,join
encode。
整数类型
整数类型是int类的对象。
1.bit_length:将整数转化为二进制需要占的位数。
2.to_bytes:获取数字的字节表示形式,根据byteorder来判断在前面补0还是后面补0。
整数类型最常用的是int方法。将字符串转化为数字,将其他进制的数字转化为十进制。
num = ‘1123’
num = int(num)
num = ‘ff’
num = (num,16)
布尔值
布尔值集成了数字的功能。
只有数字0的布尔值是false,其他的数字布尔值都是True。
字符串、字典、列表只有空的时候是false,有值就是True。
求变量的布尔值:bool(str1)
列表
列表数据类型是list类的对象,列表是可变类型。
列表的方法:
1.append:将后面的元素追加到列表 作为最后一个元素。
2.clear:将列表当中所有的元素都清空。
3.copy:拷贝,这是浅拷贝。
4.count:统计里面元素的个数。
5.extend:列表拼接。
6.index:从列表中的第一个元素找需要的字符串,返回第一个查找到的索引。没有就报错
7.insert:表示往某个指定的索引位置删除。
8.pop:删除并接受指定索引所对应的value。
9.remove:根据value来删除数据。
10.reverse:将列表整个进行倒序。
11.sort:将整个列表的值按照首位的ascii码进行排序。默认是从小到大。如果指定reverse=True就会从大到小排列。
12.列表截取:列表的截取包前不包后。
补充:range(start,end,len):在2.7里面会生成列表,在3里面是一个生成器。而2.7里面也有生成器的机制。xrange()
enumerate:给可循环的对象额外生成一列有序的数字,返回两个值一个是序号,一个是元素。
元组
元组是一个特殊的列表,元组在创建完以后就不能修改,不能添加不能删除,不能修改。
元组只有两个方法:count和index。
元组是整体不能被修改,比如元组的元素是列表或者字典的话,可以修改这个字典和列表。因为字典和列表是可变数据类型。
元组的初始化方法和列表不太一样,元组的话是以,结尾,不是最后一个元素结尾。这里主要是为了防止只有一个元素的元组会被系统误认,而且不以逗号结尾在djngo框架中是会直接报错的。
字典
1.clear:清空整个字典。
2.dic.copy():拷贝整个字典(浅拷贝)。
3.dic.get(key,va):根据key值获取到value,如果不存在的话返回va。
4.dic.pop(key):删除key对应的键值对,并且获取对应的value值
5.dic.popitem():随机删除一个键值对,并且返回对应的key和value。
6.dic.setdefault(‘k3’,’v3’):不存在的时候增加值,存在的时候不做操作。
7.dic.update:后面跟字典,不存在的键值对就增加,存在的键值对就更新。
8.静态方法dict.fromkeys(xxx,value):接收一个可循环的东西。每次循环的结果作为key,然后value就是传的参数value。
注意事项:如果value是可变的比如字典和列表,那么所有key都指向一个内存地址。更改了就都更改。
字典的key必须是可哈希的。
集合
集合是set类。
集合其实也是一个特殊的列表,集合里面不允许有重复项。集合也是可变类型,但是里面的元素都是要求可哈希的。
初始化:
se = {“alex”,”eric”,”tony”}
方法:
1.add:向集合中添加一个元素,这个元素不能与集合内现有元素冲突。
se1={'wusir', 'test', 'python17'}
se1.add(“hehe”)
{'hehe', 'wusir', 'test', 'python17'}
2.pop:随机删除集合中的元素并且作为输出。
p = se1.pop()
print(se1,p)
{'hehe', 'test', 'python17'} wusir
3.remove:移除集合内指定的元素。
se1.remove("test")
print(se1)
{'hehe', 'python17'}
4.clear:清空集合内所有元素。
se1.clear print(se1) set()
5.copy:将集合浅copy一个新的集合。
se3=se1.copy()
print(se1,se3)
{'test', 'python17', 'wusir'} {'test', 'python17', 'wusir'}
6.difference:将主体集合与传入的集合进行比对,输出主体集合有而传入集合没有的内容。
se1 = {"python17","wusir","test"}
se2 = {"wusir","python17","liyongli","liuyi"}
print(se1.difference(se2))
{'test'}
7.discard:删除集合中的一个元素,如果没有这个元素就不做任何操作,如果有这个元素就移除。
se1.discard(“wusir”)
print(se1)
{"python17","test"}
8.intersection:生成一个交集。
se1 = {"python17","wusir","test"}
se2 = {"wusir","python17","liyongli","liuyi"}
print(se1.intersection(se2))
{'wusir', 'python17'}
9.isdisjoint:判断两个集合中的元素有没有重复的,如果没有的话就返回True,有的话就返回False。
se1 = {"python17","wusir","test"}
se2 = {"wusir","python17","liyongli","liuyi"}
print(se1.intersection(se2))
False
10.xx_update:进行XX操作以后,将生成的集合替换原有的主体集合。
11.issubset:判断传入的集合是否包含主体集合。
12.issuperset:判断主体集合是否包含传入的集合。
13.sysmetric_difference:找出两个集合不重复的元素,重新组成一个集合。
14:union:生成一个并集。
作业:
1.把群里的2个试卷把能做的都练习一下。
2.购物系统:
要求:
1.个人账户(存在文件里面)。里面有用户名 密码 重复登录次数 余额。
2.商品列表也是个文件
3.查看商品:商品如果特别多要进行分页。
4.个人购物记录。
5.个人购物记录支持模糊匹配
浙公网安备 33010602011771号