代码改变世界

python第二天:进制、字符串、列表、集合、字典常用方法

2017-05-09 11:02  明月照花眠  阅读(193)  评论(0)    收藏  举报

课前回顾

作业出现的问题

1.变量名不规范:不要使用中文、abcstr1等作为变量名,会显得很low,而且代码长了以后也不利于记忆。

2.有的缩进不使用TAB键:一般规范就是使用tab键进行缩进,这样的话既规范又省事。

3.continue/break使用不规范:continuebreak都是针对当前循环的。

上课内容

内容概要

     进制、基本数据类型(整数、布尔值、字符串、列表、元组、字典、集合)、for循环语while循环、文件操作。

进制

数据存储在电脑中是使用0101010的二进制方式来保存的。而字符编码的话会用到字节,一字节是8位。可以用82进制数来表示,或者2个十六进制数来表示。

十进制的意思就相当于是逢10进一,所以单个位上最大的数字是9。其他的进制也是同理可得。

python中有十进制与其他进制互相转化的函数:

二进制:102bin),210int(‘1001001’,2)

八进制:108oct,810int‘12375321’,8))

十六进制:1016hex),1610int(‘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_mapformat的区别是前者传的是字典。

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.expandtabsn):用来制表来对齐。\t和前面的字符串加起来占n个空格的位置。例外:一个字母和一个汉字占的宽度不一样,但是还是都按照一个空格来进行替换。

21.isidentifier:判断字符串能不能作为变量名使用。但是无法判断是否是那些已经被使用的关键字(classifwhile等)

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.列表截取:列表的截取包前不包后。

补充:rangestart,end,len):在2.7里面会生成列表,在3里面是一个生成器。而2.7里面也有生成器的机制。xrange()

          enumerate:给可循环的对象额外生成一列有序的数字,返回两个值一个是序号,一个是元素。

元组

元组是一个特殊的列表,元组在创建完以后就不能修改,不能添加不能删除,不能修改。

元组只有两个方法:countindex

元组是整体不能被修改,比如元组的元素是列表或者字典的话,可以修改这个字典和列表。因为字典和列表是可变数据类型。

元组的初始化方法和列表不太一样,元组的话是以,结尾,不是最后一个元素结尾。这里主要是为了防止只有一个元素的元组会被系统误认,而且不以逗号结尾在djngo框架中是会直接报错的。

字典

1.clear:清空整个字典。

2.dic.copy():拷贝整个字典(浅拷贝)。

3.dic.get(key,va):根据key值获取到value,如果不存在的话返回va

4.dic.pop(key):删除key对应的键值对,并且获取对应的value

   5.dic.popitem():随机删除一个键值对,并且返回对应的keyvalue

   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:找出两个集合不重复的元素,重新组成一个集合。

14union:生成一个并集。

作业:

1.把群里的2个试卷把能做的都练习一下。

2.购物系统:

要求:

1.个人账户(存在文件里面)。里面有用户名 密码 重复登录次数 余额。

2.商品列表也是个文件

3.查看商品:商品如果特别多要进行分页。

4.个人购物记录。

    5.个人购物记录支持模糊匹配