基本数据类型(int, bool, str)
基本数据类型(int, bool, str)
python基本数据类型
- int ==> 整数. 主要⽤来进⾏数学运算
- str ==> 字符串, 可以保存少量数据并进⾏相应的操作
- bool==>判断真假, True, False
- list ==> 列表 存储⼤量数据.⽤[ ]表⽰
- tuple=> 元组, 不可以发⽣改变 ⽤( )表示 不可变
- dict==> 字典, 以key: value的形式存储数据 key(标签, 便于查找) value(所保存的值)查找速度快
- set==> 集合 (类似数学里的集合) 保存⼤量数据. 不可以重复. 其实就是不保存value的dict
整数 (int)
整数
- 常见操作就那么几个 + - * / // % **
a = 4
print(a.bit_length()) #运行结果是 3 即 三位 数字4在二进制里显示是 100
布尔值 (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 [] 是 (列表)
字符串 (str)
- 字符: 单一文字符号
- 字符串: 把字符连成串,有序的字符序列
- 字符串由 ' " ''' """括起来的内容
索引
- 索引 :一排数字,字符串. 反应第某个位置的字符 索引的下标从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 = 0
while num < len(name):
if name[num] == "e":
print(num)
num += 1
# 输出结果是"e"所出现过的位置
切片
- 可以使⽤下标来截取部分字符串的内容
- 语法格式: str[start : end : step] start : 开始 end : 结尾 step : 步长
- 规则: 顾头不顾腚, 从start开始截取. 截取到end位置. 但不包括end
s12 = "Alex是个教师"
print(s12[0:3]) # 从0获取到3. 不包含3. 结果: Ale
print(s12[4:]) # 如果想获取到最后. 那么最后⼀个值可以不给
print(s12[-1:-5]) # 从-1 获取到 -5 这样是获取不到任何结果的. 从-1向右数. 你怎么数也数不到-5
print(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个字符
字符串的常用相关操作⽅法
字符大小写
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"
upper 全部转换成⼤写
- (忽略大小写的时候用,例 : 验证码) 例 ; s1
lower 全部转换成⼩写
- (忽略大小写的时候用,例 : 验证码) 例 ; s2
swapcase ⼤⼩写互相转换
- 例 ; s3
casefold 全部转换成⼩写
- 和 lower 的区别: lower 有些字种不支持(转换不了), casefold 支持更广的字种 例 ; s2
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"
切割
center 扩充单位
s = "刘伟"
s1 = s.center(4,"*") # 把字符串拉长成4个单位 用*扩充
print(s1) 打印结果"*刘伟*"
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 string
i = "Hello, how ? are, daddy's you ! "
a = i.translate(str.maketrans('', '', string.punctuation))
print(a)
# 打印结果 Hello how are daddys you
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_eggon
print(s2) # 打印结果alex_wusSBr_rSBtian_taibai_evaj_eggon
split() 切割 (常用) 把字符串转化为列表
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) #打印结果 ['', '哈哈', '呵呵', '吼吼', '']
查找
startswith() 开头
- 判断是否以xxx开头 输出结果为 True or False
endtswith() 结尾
- 判断是否以xxx结尾 输出结果为 True or False
count("a") 统计次数
- 统计
- 查找"a"出现的次数
find("sylar")
- 查找'sylar'出现的位置 ( 如果没有返回-1)
index()
- 求索引位置. 注意. 如果找不到索引. 程序会报错
isindex
- 找到大写首字母
以上格式一样
s13 = "我叫sylar, 我喜欢python, java, c等编程语⾔."
ret1 = s13.startswith("sylar") # 判断是否以sylar开头
print(ret1) # 打印结果 False
格式化输出
# 格式化输出
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)
条件判断
isalnum 是否由字⺟和数字组成
isalpha 是否由字⺟和中文 组成 (常用) **
isdigit 是否由数字组成, 不包括⼩数点
isnumeric 是否由数字组成, 不包括⼩数点
- (这个⽐较⽜B. 中⽂都识别)
- 输出结果都是 True or False
isdecimal 判断是不是十进制 用它来判断是不是阿拉伯数字 ***
s14 = "123.16"
s15 = "abc"
s16 = "_abc!@"
print(s14.isalnum())
print(s14.isalpha())
print(s14.isdecimal())
计算字符串的⻓度 len
- len() 求长度. 内置函数
- (注意: len()是python的内置函数. 所以访问⽅式也不⼀样. 你就记着len()和print()⼀样就⾏了)
s18 = "我是你的眼, 我也是a"
ret = len(s18) # 计算字符串的⻓度
print(ret) # 打印结果 11
迭代 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 = 0
while 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"