一、学习知识点概要
注释
运算符(算术运算符、比较运算符、逻辑运算符、位运算符、三元运算符、其他运算符及运算符的优先级)
变量和赋值
数据类型(整型、浮点型、布尔型)与转换(转换成整型、字符串、浮点型)
位运算
二、学习内容
(一)变量、运算符、数据类型
1.注释
【整行注释】
#……
【多行注释】三个单引号/双引号
'''xxx
xxxx'''
"""xxx
xxxx"""
2.运算符
【算术】
地板除://(向下取整)
幂:**(eg,3**3=27)
【比较】
大于等于:>=
小于等于:<=
等于:==
不等于:!=
【逻辑】
and,or,not
【位运算符】
~:按位取反
&:按位与
\|:按位或
^:按位异或
<<:左移
>>:右移
【三元运算符】
x , y = 3 , 5
if x < y :
small = x
else:
small = y
print(small)
也即
x , y = 3 , 5
small = x if x < y else y
print(small)
【其他运算符】
in:存在
not in:不存在
is:是
is not:不是
注意:
①is, is not 对比的是两个变量的内存地址;==,!= 对比的是两个变量的值
②比较的两个变量是地址不可变的类型还是地址可变的类型
【运算符的优先级】
①先一元运算符后二元运算符
②先算术运算再移位运算后位运算
③逻辑运算最后
3.变量和赋值
①需要赋值给变量
②变量名可以是数字、下划线、字母等,但不能以数字开头
③python中变量名大小写敏感
4.数据类型
int:整型
float:浮点型
用getcontext().prec来调整精度
例子:使1/7保留5位
import decimal
from decimal import Decimal
decimal.getcontext().prec = 5
a = Decimal(1) / Decimal(7)
print(a)
bool:布尔型
只有True和False(给变量赋值),数字中用1和0表示。
还可以创建变量:bool(X)
在基本类型变量中:bool(0),bool(0.00),bool(False)输出结果为False,其余为True
在容器类型变量中:X若为空的变量,则输出为False(例如:bool(''),bool(())……)
注意:可记为变量为空则输出False
数值变量中,0,0.0,0.00等都视为空,输出False
容器变量中,里面没有元素则视为空,输出False
5.获取数据类型及转换
①获取数据类型:type(object)
print(type(666))
②数据类型转换:
转换为整型:int(x)
转换为字符串:str(x)
转换为浮点型:float(x)
(二)位运算
1.二进制中的原码、反码、补码
①最高位上0表正,1表负
②正数的原码、反码、补码都一样
③负数的反码=它的原码符号位不变,其他位取反(0变1,1变0)
④负数的补码=它的反码+1
⑤0的反码、补码都是0
⑥计算机都是以补码方式进行运算的
2.按位非操作~
~:把数字的补码全部取反(包括符号位)
例子:2取反得-3
~2
-3
00 00 00 10 -> 2
~
11 11 11 01
11 11 11 00
00 00 00 11即-3
3.按位与操作&
只有两个对应位都为 1 时才为 1
4.按位或操作|
只要两个对应位中有一个 1 时就为 1
5.按位异或操作 ^(满足交换律和结合律)
只有两个对应位不同时才为 1
6.按位左移操作 <<
num << i
将num
的二进制表示向左移动i
位所得的值
7.按位右移操作 >>
num >> i
将num
的二进制表示向右移动i
位所得的值
8.利用位运算实现快速运算和整数集合
三、学习问题与解答(自己遇到的问题+课后题)
【自己遇到的问题及解答】
1.为什么3对4取余是3?(即被除数比除数小时怎么取余数?)
自己算了一下感觉余数是2,有点奇怪就上百度查了一下。
原理的话就是:
3=0*4+3
自认为可以借助divmod来理解
divmod(3,4)
输出(0, 3)
也即3=0*4+3
2.不理解位运算符的含义及运用
文件里提到“有关二进制的运算,参见“位运算”部分的讲解 。”
因为从来没有接触过,感觉这部分有点难理解,决定找视频来理解入手。
参考视频:位移运算的原理,真正搞懂位移运算符的使用_哔哩哔哩_bilibili
视频对我理解位运算很有帮助,但注意文件中没有提到无符号数,只要考虑有符号数即可。
3.一元运算符、二元运算符、三元运算符的区别
看到文件中提到了这三个定义,但是并不清楚,所以从百度搜索得知:
一元运算符是只对一个表达式执行操作,该表达式可以是数值数据类型类别中的任何一种数据类型。对于++、--这样的,只需要一个操作数就能进行运算。
二元运算符是将两个表达式合成一个稍复杂的表达式,对于+-*/%=等,都需要两个操作数才能进行运算。二元的+-*/%=比一元运算符++/--优先级低。
由此推出,个人理解认为三元运算符则是需要三个操作数。
4.待解决的问题:
例子中的格式括号内为(xx)或('xx')
与文本所给的括号(x,base=10);(object=' ');(x)不同
尚未理解,下次遇到的时候再进行思考。
【课后练习题】
1.怎样对python中的代码进行注释?
【整行注释】
#……
【多行注释】三个单引号/双引号
''' '''或""" """
2.python有哪些运算符,这些运算符的优先级是怎样的?
算术运算符、逻辑运算符、位运算符、三元运算符、其他运算符
①先一元运算符后二元运算符
②先算术运算再移位运算后位运算
③逻辑运算最后
3.python 中 is
, is not
与 ==
, !=
的区别是什么?
①is, is not 对比的是两个变量的内存地址;==,!= 对比的是两个变量的值
②比较的两个变量是地址不可变的类型还是地址可变的类型
4.python 中包含哪些数据类型?这些数据类型之间如何转换?
int整型;float浮点型;bool布尔型
数据类型转换:
转换为整型:int(x);转换为字符串:str(x);转换为浮点型:float(x)
5.位运算练习题:
leetcode 习题 136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
尝试使用位运算解决此题。
自己的理解:找出不同的数字,应该是运用位运算中的异或(^)进行考虑。
四、学习思考与总结
1.之前看视频的时候有记过关于运算符的优先级,如图:(来源:up主小甲鱼)
2.二进制转换:(图片来源:位移运算的原理,真正搞懂位移运算符的使用_哔哩哔哩_bilibili)
四则运算
加法:0+0=0,0+1=1,1+0=1,1+1=10
减法:0-0=0,1-0=1,1-1=0,0-1=1
乘法:0×0=0,0×1=0,1×0=0,1×1=1
除法:0÷1=0,1÷1=1, 1÷0无意义,0÷0无意义
逻辑运算
逻辑加(也称“或”运算,用符号“OR”、“∨”或“+”表示):0∨0=0 0∨1=1 1∨0=1 1∨1=1
逻辑乘(也称“与”运算,用符号“AND”、“∧”或“·”表示):0∧0=0 0∧1=0 1∧0=0 1∧1=1
逻辑非(也称“非”运算,用符号“NOT”或“—”表示):“0”取反后是“1”,“1”取反后是“0”
3.总结
①虽然是很基础的内容,但要完全理解来打好基础对于零基础的人还是有点困难。
②涉及到更基础的内容例如二进制的运算,边接触边补这些知识挺有趣的。
③不太敢也不太习惯提出自己的疑问去问别人,更多地是靠视频、搜索来解决问题,或者留在以后接触再来重新解决,自认为自己这点还有待改进。
④知识整理得太长了,几乎跟复制过来一样,下次有时间的话争取用思维导图来整理所学知识点。
⑤遇到完整的题目不会解决,不知道从哪里下手,可能需要通过多看一些题目多练手来提升。
⑥本次学习加笔记用时大概五个小时左右,要尽可能减少时间的浪费,提高效率。