基本数据类型(int, bool, str)
一. python基本数据类型
- int ==> 整数. 主要⽤来进⾏数学运算
- str ==> 字符串, 可以保存少量数据并进⾏相应的操作
- bool==>判断真假, True, False
- list ==> 列表 存储⼤量数据.⽤[ ]表⽰
- tuple=> 元组, 不可以发⽣改变 ⽤( )表示 不可变
- dict==> 字典, 以key: value的形式存储数据 key(标签, 便于查找) value(所保存的值)查找速度快
- set==> 集合 (类似数学里的集合) 保存⼤量数据. 不可以重复. 其实就是不保存value的dict
1.1 整数 (int)
1 整数:
- 常见操作就那么几个 + - * / // % **
a = 4print(a.bit_length()) #运行结果是 3 即 三位 数字4在二进制里显示是 100
1.2 布尔值 (bool)
- 转换问题 :
- str = str(int) 整数转换为字符串
- int = int(str) 字符串转换为整数
- bool = bool (int) 整数转换为布尔值 打印结果: 0 是False 非0是True
- int = int(bool) 布尔值转换为整数 打印结果: True是1 False是0
- bool = bool(str) 字符串转换为布尔值 空字符串是False, 不空是True
- str = str(bool) 布尔值转换为字符串 把bool值转换成相应的"值"
- 可以当做False来用的数据: 0 "" [] {} () None [] 是 (列表)
1.3 字符串 (str)
- 字符: 单一文字符号
- 字符串: 把字符连成串,有序的字符序列
- 字符串由 ' " ''' """括起来的内容
1 索引
- 索引 :一排数字,字符串. 反应第某个位置的字符 索引的下标从0开始. 使用 [] 来获取数据, 索引从0位开始计数
- 缺点: 有bug, 如果此位没有字符就会报错
01234 5 6 7 s12 = "Alex是个教师"print(s12[0]) # 打印出来时 "A"print(s12[8]) # 会报错 ,没有第八位print(s12[-1]) # 打印出是"师" (表示倒数第一位字符)
延伸题:
# name = "aleX leNb" 请输出 name 变量对应的值中 "e" 所在索引位置?name = "aleX leNb"num = 0while num < len(name): if name[num] == "e": print(num) num += 1# 输出结果是"e"所出现过的位置
2 切片
- 可以使⽤下标来截取部分字符串的内容
- 语法格式: str[start : end : step] start : 开始 end : 结尾 step : 步长
- 规则: 顾头不顾腚, 从start开始截取. 截取到end位置. 但不包括end
s12 = "Alex是个教师"print(s12[0:3]) # 从0获取到3. 不包含3. 结果: Aleprint(s12[4:]) # 如果想获取到最后. 那么最后⼀个值可以不给print(s12[-1:-5]) # 从-1 获取到 -5 这样是获取不到任何结果的. 从-1向右数. 你怎么数也数不到-5print(s12[-5:-1]) # 打印出的是 "x是个教" (始终是从左往右取, 指的是start end 处设置的数字 在数轴(x轴)上的方向,-5是start开始位, -1是end位,取不到)print(s2[-1:-5:-1]) # 步⻓是-1. 这时就从右往左取值了print(s12[:]) # 原样输出 "Alex是个教师"print(s12[::2]) # 打印出"是Ae是教", 从0取到尾,每2个取1个字符
3字符串的常用相关操作⽅法
4 字符大小写
4.1 capitalize 首 字母大写
s = "alex is not a good man! Tory is a good man"s1 = s.capitalize() # 首字母大写print(s1) #打印出来是"Alex is not a good man! tory is a good man"
4.2 upper 全部转换成⼤写
- (忽略大小写的时候用,例 : 验证码) 例 ; s1
4.3 lower 全部转换成⼩写
- (忽略大小写的时候用,例 : 验证码) 例 ; s2
4.4 swapcase ⼤⼩写互相转换
- 例 ; s3
4.5 casefold 全部转换成⼩写
- 和 lower 的区别: lower 有些字种不支持(转换不了), casefold 支持更广的字种 例 ; s2
4.6 title 每个隔开的首字母大写
- 每个被特殊字符隔开的字⺟⾸字⺟⼤写, 首字母大写之后的转为小写 (下划线. 空格及其他) 例 print(s.title())
s = "alex is not a good man! Tory is a good man"s1 = s.upper() # 全部转换成⼤写s2 = s.lower()s3 = s.swapcase()print(s1) #打印出来是"ALEX IS NOT A GOOD MAN! TORY IS A GOOD MAN"print(s2) #打印出来是"alex is not a good man! tory is a good man"print(s3) #打印出来是"ALEX IS NOT A GOOD MAN! tORY IS A GOOD MAN"print(s.title()) #打印出来是"Alex Is Not A Good Man! Tory Is A Good Man"
5 切割
5.1 center 扩充单位
s = "刘伟"s1 = s.center(4,"*") # 把字符串拉长成4个单位 用*扩充print(s1) 打印结果"*刘伟*"
5.2 strip 去空格 (常用)
- 去掉左右两端空白,中间空白不去除 (用户输入内容都要去空白) ( '\n'是换行符,'\t'是tab制表符)
- 能同时去掉(空白 . 空格. \n .\t . white space )
- rstrip() 去掉右边空格 lstrip() 去掉左边空格
s = " \t 你好啊. 我叫赛利亚 "print(s) # 打印结果" 你好啊. 我叫赛利亚 "s1 = s.strip() # 去掉空白print(s1) # 打印结果"你好啊. 我叫赛利亚"s7 = "abcdefgabc"print(s7.strip("abc")) # defg 也可以指定去掉的元素
扩展
import stringi = "Hello, how ? are, daddy's you ! "a = i.translate(str.maketrans('', '', string.punctuation))print(a)# 打印结果 Hello how are daddys you
5.3 replace(old, new) 字符串替换 (常用)
s = "alex_wusir_ritian_taibai_evaj_eggon"s1 = s.replace("taibai", "taihei")s2 = s.replace("i", "SB", 2) # 把i替换成SB, 替换2个 按从左向右的顺序print(s1) # 打印结果alex_wusir_ritian_taihei_evaj_eggonprint(s2) # 打印结果alex_wusSBr_rSBtian_taibai_evaj_eggon
5.4 split() 切割 (常用) 把字符串转化为列表
5.5 join() 加入 split的逆反 把列表转化为字符串 ,也可以遍历字符串
join 是遍历(迭代)方式添加li = ["李嘉诚", "麻花藤", "⻩海峰", "刘嘉玲"]s = "_".join(li) print(s)li = "⻩花⼤闺⼥"s = "_".join(li)print(s) # 打印结果 李嘉诚_麻花藤_⻩海峰_刘嘉玲
- 打印结果是list(列表)
s9 = "alex,wusir,sylar,taibai,eggon"lst = s9.split(",") # 字符串切割, 根据,进⾏切割print(lst) #打印结果 ['alex', 'wusir', 'sylar', 'taibai', 'eggon']#坑s11 = "银王哈哈银王呵呵银王吼吼银王"lst = s11.split("银王") # 如果切割符在左右两端. 那么⼀定会出现空字符串.深坑请留意print(lst) #打印结果 ['', '哈哈', '呵呵', '吼吼', '']
6 查找
6.1 startswith()
- 判断是否以xxx开头 输出结果为 True or False
6.2 endtswith()
- 判断是否以xxx结尾 输出结果为 True or False
6.3 count("a")
- 统计
- 查找"a"出现的次数
6.4 find("sylar")
- 查找'sylar'出现的位置 ( 如果没有返回-1)
6.5 index()
- 求索引位置. 注意. 如果找不到索引. 程序会报错
6.6 isindex
- 找到大写首字母
以上格式一样
s13 = "我叫sylar, 我喜欢python, java, c等编程语⾔."ret1 = s13.startswith("sylar") # 判断是否以sylar开头print(ret1) # 打印结果 False
7格式化输出
# 格式化输出s12 = "我叫%s, 今年%d岁了, 我喜欢%s" % ('sylar', 18, '周杰伦') # 之前的写法print(s12)s12 = "我叫{}, 今年{}岁了, 我喜欢{}".format("周杰伦", 28, "周润发") # 按位置格式化print(s12)s12 = "我叫{0}, 今年{2}岁了, 我喜欢{1}".format("周杰伦", "周润发", 28) # 指定位置print(s12)s12 = "我叫{name}, 今年{age}岁了, 我喜欢{singer}".format(name="周杰伦", singer="周润发", age=28) # 指定关键字print(s12)
8条件判断
8.1 isalnum 是否由字⺟和数字组成
8.2 isalpha 是否由字⺟和中文 组成 (常用)
8.3 isdigit 是否由数字组成, 不包括⼩数点
8.4 isnumeric 是否由数字组成, 不包括⼩数点
- (这个⽐较⽜B. 中⽂都识别)
- 输出结果都是 True or False
8.5 isdecimal 判断是不是十进制 用它来判断是不是阿拉伯数字
s14 = "123.16"s15 = "abc"s16 = "_abc!@"print(s14.isalnum())print(s14.isalpha())print(s14.isdecimal())
9 计算字符串的⻓度 len
- len() 求长度. 内置函数
- (注意: len()是python的内置函数. 所以访问⽅式也不⼀样. 你就记着len()和print()⼀样就⾏了)
s18 = "我是你的眼, 我也是a"ret = len(s18) # 计算字符串的⻓度print(ret) # 打印结果 11
10 迭代 for
存储类型的集合,如list , dict , tuple , set et: 在迭代时,不容许里面的元素位置发生改变,如需改变里面的数据,需用其他存储数据转移迭代对象
- 字典在循环的时候可以修改,但不能删除
我们可以使⽤for循环来便利(获取)字符串中的每⼀个字符:
- in有两种⽤法:
- 在for中. 是把每⼀个元素获取到赋值给前⾯的变量.
- 不在for中. 判断xxx是否出现在str中
for循环 for 变量 in 可迭代对象: 循环体(break, continue) else: 当循环结束的时候执行else
# for 与 while 语句 对比:(各有利弊)# while : (循环. 死循环 .有索引)s = "朱元璋朱棣12345"count = 0while count < len(s): # 遍历字符串的第一种办法 print(s[count]) count = count + 1# for : (没有索引)s = "朱元璋朱棣12345"for count in s: print(count) # 打印出结果是遍历变量"s"例的元素print(count) ### 打印出变量最后一个元素(面试大坑)
s = "朱元璋朱棣12345"for c in s: # 遍历字符串的第二种办法 print(c)
for 语句 可以 以 else语句收尾 , else 语句可以打印出来
s="321"for c in s : print("倒计时%s秒"%(c))else: print("出发!")# 倒计时3秒# 倒计时2秒# 倒计时1秒# 出发!
扩展: pass 和 ... 都是占位符
扩展:
用for 或者 while 便利元素,如果不想便,print(便利,end = ""),这样会打印出横向的
pint内运算会出现换行符
s = "123"for i in s: print(i) # 打印出结果是纵向的"1""2""3" print(i) # 打印出结果是横向的"123"