Python之路番外(第一篇):Python基本数据类型小测试及其他知识点

一、基础小知识点

1、if/for/while语句中,即使执行语句只有一句,也必须另起一行。

 

2、在python中,python用相同的缩进表示同级别的语句块。

 

3、在python中,对变量的名字大小写是敏感的(PI和pi是不同的变量)。

 

4、每行长度79,换行可使用反斜杠,最好使用圆括号。

 

5、操作符左右各加一个空格,不要为了对齐增加空格。就是各种大于小于 等于号左右加空格。

 

6、函数默认参数使用的赋值符左右省略空格,就是在函数中参数等号左右不要使用空格,这个可以作为特例。

 

7、类与类之间空两行、方法与方法之间空一行。

 

 

 

二、关于基本数据类型的几个有趣的小题目

1、直接口算

v = dict.fromkeys(['k1', 'k2'], [])
v['k1'].append(666)
print(v)
v['k1'] = 777
print(v)

  

直接说出两次打印结果。

答案:

v = {'k1':[666],'k2':[666]}
v = {'k1':777,'k2':[666]}

  

分析:

[]是可变数据类型,内存中k1和k2都指向同一个内存地址,只要指向的内存地址发生变化,k1和k2都要改变(保持一致),这里的k1,k2对应的值最开始都指向[]这个内存地址,而v['k1'].append(666)在[]添加了元素666,改变的是[]的第二层内存地址,k1,k2对应的值指向的第一层内存地址仍没有改变,所以k1,k2的值都变成了 [666]。

 

第二次打印,v['k1'] = 777,这里直接对k1的值进行重新赋值,数字是不可变数据类型,也就是说这里会改变k1对应的值的内存地址,所以这里是k1的值直接指向了新的内存地址,而k2不变。

 

 

2、求结果

v1= a=1 or 2
v2 = b=1 and 2  
v3 = c=1 < (2==2)   
v4 = d=1<2==2
print(v1)
print(v2)
print(v3)
print(v4)

  

答案

1
2
False
True

分析:

逻辑运算规则

x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。

x or y 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。

not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。

总结:a and b ,如果a不行,那就返回这个不行的a,如果 a 和b都行则返回b。

a or b,如果a不行则跳到后面的b,这里不管b行不行,如果a行就是a。

not a就是直接取反。

分析上题:

a=1 or 2 ,or 语句,前真返回 前面的1

b=1 and 2 and语句,如果 a 和b都行则返回b即返回2

c=1 < (2==2) 先执行括号里的,2==2 结果是True, 1< true 很显然,结果是False

d=1<2==2 注意这里是链式对比,相当于1<2 and 2==2,所以是true and 2==2 ,最后的结果是True

 

3、(1)求结果:2 & 5

(2)求结果:2 ^ 5

(3)求结果:2 | 5

分析:这里是位运算

规则:

(1)&是位与运算符

参与运算的两个值,如果两个相应bit位相同,则结果为1,否则为0。

相同为1不同为0

(2) ^是位异或运算 参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。 相同为0不同为1

(3)位或运算符(|) 与运算的两个值,如果两个相应bit位相同,只要有一个为1则为1,否则为0。

 

第一个2 & 5求值过程

2的转为二进制是 010

5的转为二进制是101

所以这两个二进制对应的bit位置,第一个是0对1,第二个是1对0,第三个是0对1,全都不同

所以结果是000,即最后的运算结果是000转为十进制还是0。

print(2 & 5) # 010 & 101 => 000 => 0

 

第二个2 ^ 5求值过程

2的转为二进制是 010

5的转为二进制是101

运算规则是相同为0不同为1,与上面的方法相似,他们最后运算的二进制结果是111,转为十进制为

print(2 ^ 5)  # 10 ^ 101 => 111 => 1*2**0+1*2**1+1*2**2=1+2+4=7

  

 

第三个 2 | 5求值过程

2的转为二进制是 010

5的转为二进制是101

运算规则是只要有一个为1则为1,否则为0。

与上面的方法类似,最后运算的二进制结果是111,所以这里的结果还是7。

 

4、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?

l = ['1','2','3']
res = [int(i) for i in l]
print(res)

  

 

5、如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?

方法一
a = '1,2,3'
a=a.replace(',','')
res = [i for i in a]
print(res)

方法二"1,2,3".split(',')

  

 

posted on 2018-03-16 19:50  Nicholas--  阅读(254)  评论(0编辑  收藏  举报

导航