猴砸

基本数据类型(二)

 数据运算

一、算数运算

1、取模:%

print(10 % 2)
print(11 % 2)

# 结果
#0 
#1

2、取整数://

print(10.3 // 3)    #取整数
print(10.3 / 2)     #除法

# 结果
#3.0
#5.15

二、比较运算

<> 与!=一样,但是一般使用的是!= 

 

三、赋值运算

四、逻辑运算

1、and

全部为真即为真,有一个假即为假

a,b,c = 3,5,7
print(a >2 and c <7)
print(a >2 and c <8)
print(a >2 and c <7 and b > 4)

# 结果
#False   真假=假
#True    真真=真
#False   真假假 = 假
#假假 = 假,真假 = 假  假真 = 真  真真 = 真  
#可以加多个and(一般是使用2个)必须全部为真才是真

2、or

只要有一个为真就为真,全部为假就为假

a,b,c = 3,5,7
print(a >2 and c <8 and b > 4 or c == 8)
print(a >2 and c <7 and b > 4 or  c == 8)

# 结果
#True   
#False    
#只要有一个为真就为真,必须两个都是假才是假
#a >2 and c <8 and b > 4 为真  c == 8 为假  所以为真
#a >2 and c <7 and b > 4  为假   c == 8 为假  所以为假

3、not

a,b,c = 3,5,7
if not a >2 and c <8 and b > 4 or c == 7:print("ddddd")
if not  a >2 and c <7 and b > 4 or  c == 8:print('dddd')

# 结果
#dddd
#
#if not  后面的条件如果为真的话则执行print语句,为假的话不执行


a = [1,2,3,4]
if 1 not  in a:print('hahhah')
if 32 not in a :print('hahahhah')
# 结果
#
#hahahhah


a = '333'
if not a.isdigit():print('ddds')
print(type(a))
print(a.isdigit())

#结果:
#<class 'str'>
#True

五、成员运算

六、身份运算

 

a = [1,2,3,4]
print(type(a))
print(a is list)
print(type(a) is  list)


# 结果
#<class 'list'>
#False
#True

 

七、位运算

1、二进制

1.1、最小的单位

二进制是计算机里最小的单位,只有两个值,分别为0、1

1.2、计算机里面为什么用0、1来表示最小的单位?

因为计算机最底层是通过电流来实现的,通过电流来表示数字、文字等,但是电流只有开、关两种情况,一个动作只能代表一个信息。

电流代表最简单的信息,通过0和1来传递更新的信息。

 

最大:1024

规律:前面的数加起来比后面的这个数少1,例如要用第五位的16来表示前面四个数的话16-1 = 8+4+2+1

电路也是只能用开关来表示两种状态,关 = 0 ,开 =1

 

2、计算机的加法

计算机中能表示的最小单位:一个二进制位(0或1)=1bit

计算机中能存储的最小单位:1个二进制位(表示一个信息)

人们为了看起来比较容易,将二进制分组成8个二进制位一组:8 bit =1byte(字节)

计算机任何一个字符至少用1个字节存储

1024byte = 1kbyte(下载用的)

1024kbyte = 1mbyte

1024MB = 1GB

1024GB = 1TB

3、与运算(&)

1&1 =1    1&0=0   0&1=0   0&0=0

 

a = 60   #60 = 0011 1100
b = 13   #13 = 0000 1101
print(a & b)

#结果
#12   0000 1100

4、或运算(|)

0|0=0   1|0=1   0|1=1    1|1=1

 

a = 60   #60 = 0011 1100
b = 13   #13 = 0000 1101
print(a | b)

#结果
#61   0011 11001

5、异或运算(^ )

0^0=0   1^1=0  (相同为0)

0^1=1    1^0=1   (不同为1)

a = 60   #60 = 0011 1100
b = 13   #13 = 0000 1101
print(a ^ b)

#结果
#49   0011 0001 

6、按位取反运算(~)

~:按位取反运算--取一个值的反数

对60取反得到二进制1100 0011=195    256-195=-61

a = 60   #60 = 0011 1100
print(~a)

#结果
#-61    195-256=-61 

7、左移(<<)

左移1 = 60*2

左移2 = 60*4

a = 60   #60 = 0011 1100
print(a<<2)

#结果
#240  

8、右移(>>)

右移1 = 60/2

右移2 = 60/4 

a = 60   #60 = 0011 1100
print(a>>2)

#结果
#15

八、运算符优先级

 

while死循环(loop)

 

一、定义

有一种循环叫死循环,一经触发,就永远的运行着,但是计算机的内存是有限的,所以如果内存不够的话就不会再循环了。

二、创建死循环

while  True:只要为真,会一直运行下去,没运行一次就打印并且自动加1

count = 0
while True:
    print("hahahhha",count)
    count +=1

三、应用

1、达到一定的条件停止循环

关键词 作用
count(100) 如果count加到100的话就停止
break 跳出整个循环
continue 运行到continue的话下面的程序就不走了,直接接上下一个循环

 

 

 

 

count = 0
while True:
    print("循环啊循环啊循环",count)
    count +=1
    if count == 100:
        print("不循环啦")
        break



#打印结果
'''
循环啊循环啊循环 0
循环啊循环啊循环 1
....0-99不列出啦,太长了
循环啊循环啊循环 94
循环啊循环啊循环 95
循环啊循环啊循环 96
循环啊循环啊循环 97
循环啊循环啊循环 98
循环啊循环啊循环 99
不循环啦
'''

 

2、选择性循环打印

count = 0
while True:
    count +=1    #需要放到这个位置,不能放在continue后面,因为这样的话就不会自加1了。
    if count > 2 and count <10:
        continue
    print("循环啊循环啊循环",count)
    if count == 15:
        print("不循环啦")
        break



#打印结果
'''
循环啊循环啊循环 1
循环啊循环啊循环 2
循环啊循环啊循环 10
循环啊循环啊循环 11
循环啊循环啊循环 12
循环啊循环啊循环 13
循环啊循环啊循环 14
循环啊循环啊循环 15
不循环啦
'''

 

字典

一、释义

举个🌰:从13亿人中国人中找出王小华

1、列表

name = [1,[123988298,'wangxiaohua','shandong'],56,456,'hjjjj']
print(name.index(123988298))


#结果:
#ValueError: 123988298 is not in list
#通过index方法来查找的话只能查找到大列表里面的元素,对于嵌套在大列表的小列表并不能查找到。

2、for循环

不可取。不具备去重功能,容易出现循环错误。比如上面身份证或者是其他信息重复的话,就不能正确的读取出来

3、字典

3.1、嵌套:字典里面可以嵌套字典、列表等元素

3.2、去重功能-随机

 

id_db = {
    347917737977890:{
        'name':'wangxiaohua',
        'age':20,
        'addr':'shanghai',
    },
    347917737977890:{
        'name':'wangxiaohong',
        'age':20,
        'addr':'shanghai',
    },
    347917734392438: {
        'name': 'wangdaha',
        'age': 20,
        'addr':'beijing',
    },
}
print(id_db)


#结果:
#{347917737977890: {'name': 'wangxiaohong', 'age': 20, 'addr': 'shanghai'}, 
# 347917734392438: {'name': 'wangdaha', 'age': 20, 'addr': 'beijing'}}
#小华跟小红的身份证是重复的,所以随机去掉了一个

二、结构

1、结构

key:value 对

 

2、字典中的key

key必须是唯一的,如果key重复的话,就会随机的去掉其中一个

 

3、字典的格式

中括号开始,中括号结束,中间的value内容可以是字典、字符串、列表等

 

4、嵌套

中间如果嵌套的字典,字典都是key:value对,每个key:value对需要用逗号隔开

 

 

三、基本操作

1、取值--根据key的唯一性来取值

id_db = {
    347917737977890:{
        'name':'wangxiaohua',
        'age':20,
        'addr':'shanghai',
    },
    347917737977893:{
        'name':'wangxiaohong',
        'age':20,
        'addr':'shanghai',
    },
    347917734392438: {
        'name': 'wangdaha',
        'age': 20,
        'addr':'beijing',
    },
}
print(id_db[347917737977890])



#结果:
#{'addr': 'shanghai', 'age': 20, 'name': 'wangxiaohua'}
#取得是347917737977890对应的value值

 

2、修改

id_db = {
    347917737977890:{
        'name':'wangxiaohua',
        'age':20,
        'addr':'shanghai',
    },
    347917737977893:{
        'name':'wangxiaohong',
        'age':20,
        'addr':'shanghai',
    },
    347917734392438: {
        'name': 'wangdaha',
        'age': 20,
        'addr':'beijing',
    },
}

id_db[347917737977890]['name'] =  'wangwang'
print(id_db[347917737977890])



#结果:
#{'name': 'wangwang', 'addr': 'shanghai', 'age': 20}
#取得是347917737977890对应的value值,将name修改成wangwang

3、添加值

id_db = {
    347917737977890:{
        'name':'wangxiaohua',
        'age':20,
        'addr':'shanghai',
    },
    347917737977893:{
        'name':'wangxiaohong',
        'age':20,
        'addr':'shanghai',
    },
    347917734392438: {
        'name': 'wangdaha',
        'age': 20,
        'addr':'beijing',
    },
}

id_db[347917737977890]['wife'] =  'hehe'
print(id_db[347917737977890])



#结果:
#{'addr': 'shanghai', 'age': 20, 'wife': 'hehe', 'name': 'wangxiaohua'}
#347917737977890对应的value值里面添加wife key:value对

4、删除

4.1、del删除

id_db = {
    347917737977890:{
        'name':'wangxiaohua',
        'age':20,
        'addr':'shanghai',
    },
    347917737977893:{
        'name':'wangxiaohong',
        'age':20,
        'addr':'shanghai',
    },
    347917734392438: {
        'name': 'wangdaha',
        'age': 20,
        'addr':'beijing',
    },
}

del id_db[347917737977890]['name']
print(id_db[347917737977890])



#结果:
#{'addr': 'shanghai', 'age': 20}

4.2、POP删除

id_db = {
    347917737977890:{
        'name':'wangxiaohua',
        'age':20,
        'addr':'shanghai',
    },
    347917737977893:{
        'name':'wangxiaohong',
        'age':20,
        'addr':'shanghai',
    },
    347917734392438: {
        'name': 'wangdaha',
        'age': 20,
        'addr':'beijing',
    },
}

id_db[347917737977893].pop("age")
print(id_db[347917737977893])



#结果:
#{'addr': 'shanghai', 'name': 'wangxiaohong'}

5、复制-copy

与列表中的copy一样

6、清空操作--clear

7、获取--get

查看的key不存在

id_db = {
    347917737977890:{
        'name':'wangxiaohua',
        'age':20,
        'addr':'shanghai',
    },
    347917737977893:{
        'name':'wangxiaohong',
        'age':20,
        'addr':'shanghai',
    },
    347917734392438: {
        'name': 'wangdaha',
        'age': 20,
        'addr':'beijing',
    },
}

print(id_db.get(3479177324893))



#结果:
#None     key:3479177324893对应是没有value的,所以打印出来是none




#如果没有对应的value会直接报错
id_db = {
    347917737977890:{
        'name':'wangxiaohua',
        'age':20,
        'addr':'shanghai',
    },
    347917737977893:{
        'name':'wangxiaohong',
        'age':20,
        'addr':'shanghai',
    },
    347917734392438: {
        'name': 'wangdaha',
        'age': 20,
        'addr':'beijing',
    },
}

print(id_db[3479177324893])



#结果:
#KeyError: 3479177324893

8、更新--update

id_db = {
    1111:'1',
    2222:'2',
}

id_db2 = {
    3333:'3',
    4444:'4',
    5555:'5'
}

id_db.update(id_db2)     #将id_db2字典里面的东西更新到id_db字典里面去
print(id_db)


#结果:
# {5555: '5', 4444: '4', 3333: '3', 2222: '2', 1111: '1'}
#将id_db2更新到id_db里面,如果id_db里面没有的的话直接添加上去




#相同的key,不同的value
id_db = {
    1111:'1',
    2222:'2',
}

id_db2 = {
    1111:'11',
    4444:'4',
    5555:'5'
}

id_db.update(id_db2)     #将id_db2字典里面的东西更新到id_db字典里面去
print(id_db)


#结果:{5555: '5', 4444: '4', 2222: '2', 1111: '11'}
#id_db2的value直接覆盖到id_db中

9、将字典变成一个元组(列表)--item

id_db = {
    1111:'1',
    2222:'2',
}
print(id_db)
print(id_db.items())


#结果:
#print(id_db)
#print(id_db.items())

10、打印所有的values

id_db = {
    1111:'1',
    2222:'2',
}
print(id_db)
print(id_db.values())


#结果:
#print(id_db)
#dict_values(['2', '1'])

11、打印所有的keys

id_db = {
    1111:'1',
    2222:'2',
}
print(id_db)
print(id_db.keys())


#结果:
#print(id_db)
#dict_keys([2222, 1111])

12、判断对应的字典是否包含我们想要的身份证

12.1、适用于python2、python3版本

id_db = {
    1111:'1',
    2222:'2',
}
print(id_db)
print(999 in id_db)


#结果:
#print(id_db)
#False    #表示在id_db里面没有这个key

12.2、仅仅适用于python版本

id_db = {
    1111:'1',
    2222:'2',
}
print(id_db)
print(id_db.has_key(9999))

#结果:
#print(id_db)
#False    #表示在id_db里面没有这个key

13、添加一个key:value对

#添加一个只有key没有value的,默认value为none
id_db = {
    1111:'1',
    2222:'2',
}
print(id_db)
id_db.setdefault(9999)
print(id_db)

#结果:
#print(id_db)
#{9999: None, 2222: '2', 1111: '1'}



#添加key:value对
id_db = {
    1111:'1',
    2222:'2',
}
print(id_db)
id_db.setdefault(9999,'9')
print(id_db)

#结果:
#print(id_db)
#{9999: '9', 2222: '2', 1111: '1'}

14、formkeys

id_db = {
    1111:'1',
    2222:'2',
}
print(id_db.fromkeys([11,22,33,44],'dddd'))
print(id_db)
print(dict.fromkeys([11,22,33,44],'dddd'))


#结果:
#{33: 'dddd', 11: 'dddd', 44: 'dddd', 22: 'dddd'}
#{2222: '2', 1111: '1'}
#{33: 'dddd', 11: 'dddd', 44: 'dddd', 22: 'dddd'}
#通过字典去调用对象里面的方法,只要是字典都可以进行调用这个方法,与是什么字典,没有关系,用默认的字典dict去调用也可以

15、popitem--随机删除一对key:value对

id_db = {
    1111:'1',
    2222:'2',
    3333:'3',
    4444:'4',
    5555:'5',
}

print(id_db)
print(id_db.popitem())
print(id_db)



#结果:
#{5555: '5', 4444: '4', 3333: '3', 2222: '2', 1111: '1'}     #删除之前的
#(5555, '5')   #打印出来被随机删除的key:value对
#{4444: '4', 3333: '3', 2222: '2', 1111: '1'}   #剩余的字典

16、循环字典

16.1、简单循环--效率低,需要有一个dict to list的转换过程,适合数据量较小的

id_db = {
    1111:'1',
    2222:'2',
    3333:'3',
    4444:'4',
    5555:'5',
}

for k,v in id_db.items():
    print(k,v)



#结果:
'''
5555 5
4444 4
3333 3
2222 2
1111 1
'''

16.2、适用数据量较大

id_db = {
    1111:'1',
    2222:'2',
    3333:'3',
    4444:'4',
    5555:'5',
}

for key in id_db:
    print(key,id_db[key])



#结果:
'''
5555 5
4444 4
3333 3
2222 2
1111 1
'''

总结

生成字典的语法-取值-修改-插入-删除指定-取值不报错-取值报错(不使用)-更新-items(不用)-取values(不用)--打印keys--打印values

判断存在不?--setdefault--fromkeys--popitem(不用)--循环

 

集合-set

一、创建集合

#方式一
se = {'123','456'}
print(type(se))


#结果:<class 'set'>

#方式二
s = set()
print(s)


#结果:set()   创建一个空集合
#自动执行set()类里面的__init__方法



#方式三
li = [22,33,44,55]
s1 = set(li)
s3 = set([2,3,44,55])
print(s1)
print(s3)

#结果:
# {33, 44, 22, 55}
#{2, 3, 44, 55}
#列表转换成集合

二、基本操作

1、创建空集合

s = set()
print(s)


#结果:set()   创建一个空集合
#自动执行set()类里面的__init__方法

2、add方法

s = set()
s.add(456)
print(s)


#结果:{456}



s = set()
s.add(456)
s.add(456)
s.add(456)
s.add(456)
print(s)


#结果:{456}
#添加多个一样的元素,只会默认添加一个元素

3、clear:清除所有内容

s3 = set([2,3,44,55])
print(s3)
s3.clear()
print(s3)

#结果:
# {2, 3, 44, 55}
#set()

4、copy(浅copy)--类似于列表的浅copy

5、difference

S1中存在S2中不存在的所有元素

S1进行调用,S2是后面加入的参数

A = {11,22,33}
B = {22,33,66}

C = A.difference(B)
print(C)

#结果:{11}
#取A中存在的,B中不存在的。

6、symmetric_difference

A = {11,22,33}
B = {22,33,66}

C = A.symmetric_difference(B)
print(C)

#结果:{66, 11}
#取A中存在的,B中不存在的;取B中存在的,A中不存在的

5跟6不改变集合A、B的值,是产生新的集合C

7、difference_update

A = {11,22,33}
B = {22,33,66}

A.difference_update(B)
print(A)

#结果:{11}
#取A中存在的B中不存在的元素,更新到A集合当中去,如果B中有A集合的元素直接去掉

8、symmetric_difference_update

A = {11,22,33}
B = {22,33,66}

A.symmetric_difference_update(B)
print(A)

#结果:{66,11}
#集合A、B中都不相同的元素到A中去

7跟8改变集合A的值

9、discard:移除指定元素

A = {11,22,33}

A.discard(11)
print(A)

#结果:{33,22}
#移除指定的元素
A = {11,22,33}

A.discard(55)
print(A)

#结果:{33, 11, 22}
#原样打出
#移除的指定元素不存在,照原样打出,不会报错

10、POP删除

#方法里面不能带参数
A = {11,22,33}
A.pop(22)
print(A)



#结果:TypeError: pop() takes no arguments (1 given)



A = {11,22,33}
A.pop()
print(A)


#结果:{11, 22}
#随机删除某一个元素


A = {11,22,33}
C = A.pop()
print(C)


#结果:33
#随机删除某一个元素,并且随机删除的元素会直接赋值给C

11、remove删除-与discord一样,但是移除的元素不存在的话会报错(推荐使用discord)

12、intersection--取两个集合的交集

A = {11,22,33}
B = {55,66,33}
C = A.intersection(B)
print(C)


#结果:{33}
#取两个集合的交集

13、intersection_update

A = {11,22,33}
B = {55,66,33}
A.intersection_update(B)
print(A)


#结果:{33}
#取两个集合的交集并更新到到A集合中去 

14、isdisjoint

判断两个集合是否是并集,是的话打印出True,不是的话打印出False

A = {11,22,33}
B = {55,66,33}
print(A.isdisjoint(B))

#结果:False



A = {11,22,333}
B = {55,66,33}
print(A.isdisjoint(B))

#结果:True

15、issuperset--判断是否有父序列

A = {11,22,33}
B = {22,33}
print(A.issuperset(B))

#结果:True
#存在包含关系,打印出True



A = {11,22,333}
B = {11,66,33}
print(A.issuperset(B))

#结果:False

16、union--取并集

A = {11,22,33}
B = {22,33}
C = A.union(B)
print(C)

#结果:{33, 11, 22}

17、update--批量添加元素

接收一个可以被for 循环,可迭代的元素--批量添加元素

添加多个元素可以通过列表的方法,内部自动执行add方法添加到集合里面

for循环字符串:一个字符一个字符进行循环

add方法:一个元素一个元素添加

可迭代元素:字符串、列表、数字、元组

A = {11,22,33}
li = [44,22,66,77]
A.update(li)

print(A)

#结果:{33, 66, 11, 44, 77, 22}


#添加字符串
A = {11,22,33}
li = 'tangtang'
A.update(li)

print(A)

#结果:{33, 't', 11, 'a', 'n', 22, 'g'}

三、拓展

双下划线方法:自动执行

li = [11,22,33]   #list __init__
li()              #list __call__
li[0]              #list __getitem__
li[0] = 123         #list __setitem__
def li[1]           #list __delitem__

#li是一个对象,类是list 如果在对象后面加括号的话就会自动执行python定死的list对象方法(含下划线的方法)

四、set函数练习

需求

1、假设做一个资产采集的功能,在资产采集之前在内存里已经有保存一定的数据

2、第一个槽位插了一块8GB的内存,第二块:4GB,第三块:没有,第四块:2GB

3、将第一个内存条换成4GB的内存,拔了第四块内存插到第三个位置

4、将拔插的内存条位置进行更新

需求分析

1、利用字典来创建内存条

2、 将第一块8GB内存条换成4GB内存条

  old里面有的new里面没有的--删除

  new里面有的old里面没有的添加到old里面

  new、old里面都有的,更新对应的值

#应该删除哪几个槽位?
    #old_dict存在,new_dict不存在的key
    #之前的操作只能操作元素,不能直接操作字典,所以需要将字典中的key转换成集合
    #执行删除操作

old_dict = {
    '#1':8,
    '#2':4,
    '#4':2,
}
new_dict = {
    '#1':4,
    '#2':4,
    '#3':2,
}

#old_kyes = old_dict.keys()
#old_set = set(old_kyes)

#new_keys = new_dict.keys()
#new_set  =  set(new_keys)
new_set = set(new_dict.keys())
old_set = set(old_dict.keys())

remove_set = old_set.difference(new_set)

#添加
add_set = new_set.difference(old_set)
#更新(找两个集合的交集)
updeta_set = old_set.intersection(new_set)

 

posted @ 2017-09-12 16:27  猴砸  阅读(352)  评论(0编辑  收藏  举报