1.2 简单数据类型
1. 整型
- 整型就是我们常见的自然数,比如-1, -100, 0, 3, 1000, 10000000
- 范围:范围取决于是多少位的机器,我们后续再来学习,一般应用中不会遇到范围的问题,但是需要考虑到(我们称之为edge case)
- python 关键字 是
int
1.1 整型支持的运算类型
- 当我们说运算符的时候,我们指的是一个数值和另一个数值想操作得到的结果,比如
3+2
中的操作符+
号就是对数值3
和数值2
进行加法操作的运算符,还有很多其他运算符
1.1.1 基本数学运算符
- 两个整数通过基本运算符得到的结果是一个数(可能是整数,可能是带小数的数,可能会报错)
- 加法运算:
+
- 比如:
print(3+2)
,我们将得到5
- 比如:
- 减法运算:
*
- 比如:
print(3*2)
, 我们得到6
- 比如:
- 除法运算:
/
- 比如:
print(3 / 2)
, 我们得到1.5
,(注意这里除法运算得到的结果是浮点数(带小数点),可以参考下节) print(1/0)
, 会报错:>>> print(1/0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
- 比如:
- 整除运算:
//
- 比如
print(3 // 2)
, 我们得到1
, (这里得到的就是纯整数)
- 比如
- 取余运算:
%
- 比如
print(10 % 3)
, 我们得到1
- 比如
- 幂运算:
**
, 就是我们数学上常见的多少次方- 比如
print(2**10)
, 我们得到1024
- 比如
1.1.2 比较运算符
- 比较运算符就是希望知道两个整数之间的关系,或者说大小,
- 两个整数通过比较运算符得到的结果是一个布尔类型的值,只可能是
True
或者False
,参见第三小节
==
: 判断两个整数是否相等- 比如:
print(3 == 3)
, 得到True
(注意我们在上一章学习了赋值操作:=
,是一个等于号,这里判断是否相等是两个等于号,初学者容易弄混) print(3 == 4)
, 得到False
- 比如:
!=
: 判断两个整数是否不相等- 比如:
print(3 != 3)
, 得到False
print(3 != 4)
, 得到True
- 比如:
A > B
: 判断A是不是大于B- 比如:
print(3 > 3)
, 得到False
print(4 > 3)
, 得到True
- 比如:
A < B
: 判断A是不是小于B- 比如:
print(3 < 3)
, 得到False
print(3 < 4)
, 得到True
- 比如:
A >= B
: 判断A是不是大于或等于B- 比如:
print(3 >= 3)
, 得到True
print(3 >= 4)
, 得到False
- 比如:
A <= B
: 判断A是不是小于或等于B- 比如:
print(3 <= 3)
, 得到True
print(4 <= 3)
, 得到False
- 比如:
1.1.3 位运算
- 位运算理解起来比较难,包子哥后续单独写一个教程关于位运算,位运算在工作中使用的比较少,但是在面试或折竞赛中还是会出现的,大家需要注意
2. 浮点型
- 浮点数可以理解为我们常用的小数,比如3.1415926, -2.3, 0.1等
- python 关键字 是
float
2.1 创建浮点数
x = 3.14 # 正浮点数 y = -2.5 # 负浮点数
2.2 浮点数支持的运算类型
- 和前一小节整型的运算类型非常相似,但会略有不同,其中 浮点数的整除
//
, 取余%
, 幂次方运算**
等运算几乎不用,我们不做介绍
2.2.1 基本数学运算符
- 两个浮点数通过基本运算符得到的结果是一个浮点数(也可能会报错)
- 加法运算:
+
- 比如:
print(3.1 + 2.3)
,我们将得到5.4
- 比如:
- 减法运算:
*
- 比如:
print(1.5 * 1.5)
, 我们得到2.25
- 比如:
- 除法运算:
/
- 比如:
print(3.0 / 2.0)
, 我们得到1.5
, print(3.3/0.0)
, 会报错:>>> print(3.3/0.0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division by zero
- 比如:
- 整除运算:
//
(很少用)- 比如
print(3.3 // 2.2)
, 我们得到1.0
, (这里得到的就是浮点数的整数部分,但是结果仍旧是带小数0
的)
- 比如
- 取余运算:
%
(很少用) - 幂运算:
**
, (很少用)
2.2.2 比较运算符
- 浮点数的比较运算和整数类似,我们不做冗余介绍
2.3 浮点数的表示方式
- 浮点数有多种表示方式
- 小数,比如 3.14, 2.69098
- 科学技术法, 比如: 314e-2, 314e-3
3. 布尔型(Boolean)
布尔型数值,可以简单理解为 对 或者 错
- 对,就用
True
表示, 比如问: 32 是否 大于 23, 在python中就可以用32 > 23
, 因为他正确,所以这个表达式返回的结果就是True
- 错,就用
False
表示, 比如问:11 是否 小于 9, 即11 < 9
, 这个表述错误,所以返回False
- 对,就用
python的关键字是
bool
4. 字符串
- 我们在上一章已经学习了简单的字符串定义,现在我们来学习更多的关于字符串的知识,以供后续项目使用
- python 关键字 是
str
4.1 字符串定位
- 现在我有一个字符串域名,如何获取某一个元素在字符串中的位置呢?
- 比如我对于字符串域名
"wiki.chengxuyuancd.com"
,我希望获取w
在字符串中的位置 - 在python中可以使用
"wiki.chengxuyuancd.com".index("w")
,得到的结果是0
- 注意到这里
w
在第一位,但是返回的是0
(Python中,或者说大多数的语言,下标都是从0开始的)
- 注意到这里
- 刚才我们尝试了单个的字符
w
,那如果我希望知道chengxuyuan
这个字符串在上面域名中的位置行不行呢?行"wiki.chengxuyuancd.com".index("chengxuyuan")
会返回5(因为从0开始计算对吧)
- 那如果我想找的元素不在这个字符串怎么办呀,比如我想找个问号
"wiki.chengxuyuancd.com".index("?")
,此时会返回-1
- 如果有多个字符都出现在了域名里面,我想跳过第一个,怎么办呢,比如我想跳过第一个
.
,找到第二个.
的位置- 可以使用 "wiki.chengxuyuancd.com".index(".", 5) 会返回
18
, 而不是4
, 第一个.
在第4个位置,我们从第5个元素开始计算.
的位置,所以得到18
- 可以使用 "wiki.chengxuyuancd.com".index(".", 5) 会返回
4.2 字符串切片
现在我有一个字符串域名,如何获取字符串域名中的后缀呢?
Python中有一种方式称为字符串切片,就是把字符串想象成一个一个的珠子串在一起的
现在先说一下公式:
字符串[头下标:尾下标]
,使用一个字符串s = abcdefghijklmnokqrstuvwxyz
即a-z
练习一下:- 其中头下标的值可以:(举例子的时候我们固定尾下标不写,表示到末尾)
- 不写:表示从头开始,
s[:]
就表示从头到尾,即abcdefghijklmnokqrstuvwxyz
- 0或者正整数:表示从第 头下标 个位置开始,
s[2:]
, 从第二个元素c开始(注意从0开始数)到末尾,即cdefghijklmnokqrstuvwxyz
- 负数,表示从 后往前数多少个字符开始,比如
-2
就是从倒数第二个字符开始数(不是倒数第三个), 比如s[-2:]
表示从倒数第二个字符y
开始到末尾,即yz
- 不写:表示从头开始,
- 尾下标的值可以是:(举例子的时候我们固定头下标不写,表示从头开始)
- 不写:表示到末尾,
s[:]
就表示从头到尾,即abcdefghijklmnokqrstuvwxyz
- 0或者正整数:表示到第 尾下标 结束,比如
s[:2]
表示头开始到第二个下标的元素结束,第二个下标的元素是c
(但尾下标不包含),即ab
- 负数,表示从 后往前数多少个字符,到这里结束,比如
s[:-2]
,表示从头开始到-2
这个元素y
结束(y
不包含),即abcdefghijklmnokqrstuvwx
- 不写:表示到末尾,
- 注意,头下标是比区间,尾下标是开区间(即不包含尾下标上的元素,如果不写则到末尾)
- 其中头下标的值可以:(举例子的时候我们固定尾下标不写,表示到末尾)
比如对于字符串域名
s = "wiki.chengxuyuancd.com"
- 获取字符串的前四位,即
s[:4]
- 获得域名的顶级域名,顶级域名一般是
com
或者cn
或者org
这类的,前面一定是.
,所以我们从后往前数第一个.
,即rindex
, 然后得到s[s.rindex(".")+1:]
, 即com
- 获取字符串的前四位,即
4.3 字符串运算符
操作符 | 描述 | 实例 |
---|---|---|
+ | 字符串连接 | 'Hello' + 'World' 输出为 HelloWorld |
* | 重复输出字符串 | 'ha'*3 输出为 hahaha |
[] | 通过索引获取字符串中字符 | 比如"hahahaha"[1] 输出 a(下标同样从0开始) |
[:] | 截取字符串中的一部分,遵循左闭右开原则,s[0:2] 是不包含第 3 个字符的。 | 见上面的第2小节 |
in | 如果字符串中包含给定的字符返回 True | "wiki" in "wiki.chengxuyuancd.com" 返回True |
not in | 如果字符串中不包含给定的字符返回 True | "wiki" not in "wiki.chengxuyuancd.com" 返回False |