文章目录
- 一. Python基本数据类型
- 1. 整数
- 1.1. python的四种进制
- 1.2. 数中的下划线
- 2. 浮点数
- 3. 复数
- 4. 布尔型
- 5. 运算符
- 5.1. 算术运算符
- 5.2. 比较运算符
- 5.3. 逻辑运算符
- 5.4 运算符优先级
- 6. 常量
- 二. 注释
- 三. Python之禅
一. Python基本数据类型
1. 整数
- 无长度限制:Python 3中整型数据的长度不受机器字长的影响,它的取值范围
只与计算机的内存有关
。也就是说,只要计算机的内存足够大,无论整型的长度为多少,都不用担心溢出问题。- 4种进制来表示整型,默认的是十进制,如果想要用其他进制表示,需要加上
引导符号
。
1.1. python的四种进制
二进制:以0B或0b开头;
八进制:以 0O或0o开头;
十六进制:以0X或0x开头
# 1. 转为10进制
>>> a=0b101
>>> print('a的十进制表示:%d'%a)
a的十进制表示:5# 2. 不同进制之间的转换
bin(x):将数值x转换为二进制。
oct(x):将数值x转换为八进制。
hex(x):将数值x转换为十六进制。
int(x):将字符串x转换为整数。>>> a=0b101
>>> print(bin(5))
0b101
>>> print(oct(5))
0o5
>>> print(hex(5))
0x5
# 转换为10进制
>>> print(int(a))
5
# 对整数执行加(+)减(-)乘(*)除(/)运算。
>>> 2 + 3
5
>>> 3 - 2
1
>>> 2 * 3
6
>>> 3 / 2
1.5# 两个乘号表示乘方运算:
>>> 3 ** 2
9
>>> 10 ** 6
1000000
1.2. 数中的下划线
书写很大的数时,可使用下划线将其中的数字分组,使其更清晰易读:
>>> universe_age = 14_000_000_000
>>> print(universe_age)
14000000000
在Python看来,1000与1_000没什么不同,1_000与10_00也没什么不同。这种表示法适用于整数和浮点数,但只有Python 3.6和更高的版本支持。
2. 浮点数
- Python的浮点数一般以
十进制
表示,由整数和小数部分组成,如 0.0,2.34,3.14159都是浮点数。- 对于非常大或者非常小的浮点数可以用科学记数法表示。如: 0.00000051可以表示成
5.1E-7
,314000可以表示成3.14E5
。- Python中的浮点数是
双精度
的,每个浮点数占8个字节(64位)
,52 位存储尾数
,11位存储阶码
,1位存储符号
,故浮点数的取值范围为-1.8E308~1.8E308
。超出这个范围将视为无穷大(inf)
或者无穷小 (-inf)
。- Python中最长可以输出浮点数的
17位数字
,但是计算机只能保证15位数字的精度
,对于超出17位的浮点数会产生截断。一旦产生截断,结果就会产生误差。如平时我们都会认为0.1+0.2的结果是0.3,但是实际执行的结果却是0.30000000000000004。
注意小数计算的结果包含的小数位数可能是不确定的
>>> 0.2 + 0.1
0.30000000000000004
>>> 3 * 0.1
0.30000000000000004
无论是哪种运算,只要有操作数是浮点数,Python默认得到的总是浮点数,即便结果原本为整数也是如此。
>>> 4/2
2.0
>>> 1 + 2.0
3.0
>>> 2 * 3.0
6.0
>>> 3.0 ** 2
9.0
3. 复数
格式为2+3
j和5.6+7.8j
这样的数据称为复数。一个复数由“实部”和 “虚部”
两部分组成,实部是一个实数,虚部是一个实数后加j或J组成, 虚部不能单独存在
。
# 转换为复数
>>> a=complex(2,4)
>>> print(a)
(2+4j)
# 打印实部和虚部
>>> print('实部:',a.real,'虚部:',a.imag)
实部: 2.0 虚部: 4.0
# 转换为复数
>>> print(complex(6))
(6+0j)
4. 布尔型
布尔型只有True和False两个值,本质上来说,布尔型其实是一种特殊的整数,True对应1,False对应0。
任何对象都具有布尔属性,在Python中,以下数据的值均为False:
- None
- False
- 任何为0的数字类型:0、0.0、0j。
- 任何空字符、空列表、空字典:“”、()、[ ]、{}。
- 用户定义的类实例,如果类中定义了
_bool_()
或者_len_()
方法,并且方法返回0,或者布尔值False。
以下代码结果均为False:
>>> bool()
False
>>> bool('')
False
>>> bool(0)
False
>>> bool([ ])
5. 运算符
运算符是告诉编译程序执行指定运算操作的符号,是针对操作数
进行运算。 如表达式1+0.01
中,1和0.01均为操作数
,+是运算符
。
数值运算符是一类对数值型操作数
有效的运算符。按照不同的功能, 又可以分成算术运算符、赋值运算符、比较运算符、逻辑运算符
等。
5.1. 算术运算符
一元操作符。以x=2,y=9为例,对以下算术运算符进行说明, 一元运算符如表
二元运算符如表
不同类型的数值运算
Python中的算术运算符也支持对不同类型的数值进行混合运算。在混合运算时,Python会强制将数值进行 临时类型转换。遵循原则是将简单的数据类型转换为相对复杂的那一种数据类型。
- 布尔类型进行算术运算时,会将值视为0或1。
- 整型与浮点型进行混合运算时,会将整型转换为
浮点型
。- 其他类型与复数运算时,会将其他类型转换为
复数
。
1+True #结果为2
1*2.0 #结果为2.0
1+(2+3j) #结果为(3+3j)
例题:时间转换
给定一个以秒为单位的时间t,要求用“ H : M : S ”的 格式来表示这个时间。 H 表示小时, M 表示分钟, S 表示秒,它们都是整数且没有前导的“0”。例如,若t=0,则应输出“0:0: 0”;若t=3661,则输出“1:1:1”。
t=eval(input())
H=t//3600 # 整数除得小时
t=t%3600 # 余数:去除小时的秒
M=t//60 # 整数除:秒中有多少分钟
S=t%60 # 余数:去除分钟后的秒,
print("{}:{}:{}".format(H,M,S))
5.2. 比较运算符
比较运算符是比较符号左右两边的操作数,运算结果是一个布尔值。以x=2,y=9为例,对以下比较运算符进行说明。
猜数游戏
程序中给出一个固定的数字,用户通过键盘输入一个数,如果这个数 与程序给出的数字相同,则输出“恭喜你猜对了!”,如果这个数比程序 给出的数字大则输出“太大了!”,如果这个数比程序给出的数字小,则输出“太小了!”。
y=50
x=eval(input('请输入你猜的数字:'))
if x==y:print('恭喜你猜对了')
elif x>y:print('太大了')
else:print('太小了')
5.3. 逻辑运算符
逻辑运算符可以把多个条件表达式连接起来,形成更为复杂的条件
剪刀石头布游戏
小明和小红想玩“剪刀,石头,布”游戏。在这个游戏中,两个人同 时说“剪刀”“石头”或“布”,压过另一方的为胜者。规则是:“布” 胜过“石头”,“石头”胜过“剪刀”,“剪刀”胜过“布”。
# 输入:
# 两个数分别代表小明和小红的选择,范围为{0,1,2},用逗号隔开。0表示石头,1表示布,2表示剪刀。
# 这两个数分别表示两个人所选的。如:0和2,则表小明出石头,小红出剪刀。# 输出:
# 如果前者赢,输出“小明胜”。如果后者赢,输出“小红胜”。如果 是平局,输出“平局”。a, b = eval(input())
if (a == 0 and b == 1) or (a == 1 and b == 2) or (a == 2 and b == 0): print('小红胜')
if (a == 1 and b == 0) or (a == 2 and b == 1) or (a == 0 and b == 2): print('小明胜')
if a == b:print('平局')
5.4 运算符优先级
常见运算符优先级由高到低的顺序如下:
- 乘方:∗∗
- 按位取反:~
- 正负号:+x;-x
- 乘、除、求余:∗、/、%
- 加、减:+、-;
- 比较:<、 <=、>、>=、!=、==
- 成员判断:not in、in;
- 逻辑运算:not、and、 or
同一优先级下的:
运算符
在运算时是按照从左往右
的顺序执行,如2+3-4的运算顺序是:解释器先运算2+3,得到结果5再与运算符结合执行5-4。赋值运算符
的结合则相反,按照从右往左的顺序,如x=y=z,会先 将z的值赋给y,再将y的值赋给x。
6. 常量
常量类似于变量,但其值在程序的整个生命周期内保持不变。
Python没有内置的常量类型,但Python程序员会使用全大写来指出应将某个变量视为常量,其值应始终不变:
MAX_CONNECTIONS = 5000
二. 注释
在Python中,注释用井号(#)标识。井号后面的内容都会被Python解释器忽略,
# 向大家问好。
print("Hello Python people!")
三. Python之禅
Simple is better than complex.
如果有两个解决方案,一个简单、一个复杂,但都行之有效,就选择简单的解决方案吧。这样,你编写的代码将更容易维护,你或他人以后改进这些代码时也会更容易。
Now is better than never.
你可以用余生来学习Python和编程的纷繁难懂之处,但这样你什么项目都完不成。不要企图编写完美无缺的代码,而是要先编写行之有效的代码,再决定是对其做进一步改进,还是转而去编写新代码。