一:int类型
Python中的整型只有int, 并不区分长整型和短整型
1 定义
age = 10 # age=int(10)
Python如何触发一个功能的运行
功能名字(参数)
print('hello','world')
>> hello world
2 功能和命令的输出
- 功能的输出
x=int(10)
print(x)
>> 10
_username = input('username: ')
print(_username)
>>
username: admin
admin
- print命令的输出
info = print('name') >> name
print(info) >> None
- 总结
print()的结果是不能赋值给一个变量名的, 打印变量后结果为None
3 类型转换
Python解释器并不会自动做类型转换, 而是需要手动指明类型转换
3.1 纯数字的整型字符串才能转成int
res=int('100111')
print(res,type(res))
>> 100111 <class 'int'>
str = '100dave'
int_str = int(str)
>> ValueError: invalid literal for int() with base 10: '100dave'
3.2 进制间转换
3.2.1 十进制转成其他进制
10进制 -> 二进制
11 - > 1011
1011-> 8+2+1 # 十进制和2进制互转, 以2为底数, 每一位都是2的n次幂*对应位置的数字
print(bin(11)) # 0b1011 # bin()把十进制转换成2进制, 0b开头表示这是2进制数
print(bin(123123))
>> 0b11110000011110011
10进制 -> 八进制
print(oct(11)) # 0o13 # 1*8^1+3*8^0=11
# 十进制和8进制互转, 以8为底数, 每一位都是8的n次幂*对应位置的数字
10进制 -> 十六进制
print(hex(11)) # 0xb
print(hex(123)) # 0x7b
3.2.2 其他进制转成十进制
二进制->10进制 0b或者0B表示二进制数
print(int('0b1011',2)) # 11
等价于print(0b1011)
八进制->10进制 0o表示8进制
print(int('0o13',8)) # 11
等价于print(0o13)
16进制->10进制 0x表示16进制
print(int('0xb',16)) # 11
等价于print(0xb)
二:float类型
1 定义
salary=3.1 # salary=float(3.1)
Python默认双精度, 只保留17个有效数字
2 类型转换
res=float("3.1") # 浮点型, 需要使用float进行转换
print(res,type(res))
3 指数表示浮点型
# 1e3 表示10的3次方
# 1e-3 表示10的-3次方
# 2e3 表示2*10的3次方
# 3e-3 表示3*10的-3次方
f1 = 1e3
f2 = 1e-3
f3 = 2e3
f4 = 3e-3
print(f1) ==> 1000.0 # 用指数e表示的数字类型, 即使结果为整数, 也会被认为是float类型
print(f2) ==> 0.001
print(f3) ==> 2000.0
print(f4) ==> 0.003
4 使用
int与float没有需要掌握的内置方法
他们的使用就是数学运算+比较运算
三: 字符串类型
1 定义
msg='hello' # msg=str('msg')
print(type(msg))
2 类型转换
str可以把任意其他类型都转成字符串
res=str({'a':1})
print(res,type(res))
>> {'a': 1} <class 'str'>
3 使用:内置方法
3.1 按索引取值(正向取+反向取) :只能取
msg='hello world'
# 正向取
print(msg[0]) # 字符串按索引取值就是取第几个字符, 空格也可以取到
>> h
print(msg[5])
>>
# 反向取
print(msg[-1])
>> d
info = "david"
print(info[0])
>> d
# 只能取, 不能改. 字符串是不可变的
info = "david"
info[0] = 'a'
>> TypeError: 'str' object does not support item assignment
3.2 切片
索引的拓展应用,从一个大字符串中拷贝出一个子字符串
msg='hello world' # 顾头不顾尾, 如果要取到第n位索引值, 那么要写n+1
# 正向切片
res=msg[0:5]
print(res) >> hello
print(msg) >> hello world
# 反向切片
res = msg[-1:-4] # 不会报错, 只是没有数据而已, 因为切片默认都是从左向右切片
res = msg[-1:-4:-1] # 反向切片, 需要使用-1, 表示从右到左切片, 也是顾头不顾尾
print(res)
>> dlr
步长: 默认为1, 默认从左向右切
res=msg[0:5:2] # 0 2 4, 限定了0:5, 因此最多能取到第四个索引位, 步长2为隔一个字符取一个字符
print(res) # hlo
反向步长
res=msg[5:0:-1] # 反向步长,要配合反向切片, 从正向5号索引位开始切, 从5反向切到0号索引, 5:0, 从5开始, 0是取不到的. 因为是反向切, 所以结果是倒过来的
print(res) #" olle"
msg='hello world'
res=msg[:] # res=msg[0:11], 只写一个冒号, 默认就是从0号位索引开始取, 取到最后.
print(res)
res=msg[::-1] # 把字符串倒过来, 并不会修改原字符串
print(res)
3.3 长度len
统计可迭代对象包含元素个数, 字符串, 列表, 等容器类型都可以统计, 不能统计数值类型
msg='hello world'
print(len(msg))
3.4 成员运算in和not in
判断一个子字符串是否存在于一个大字符串中, 注意: 一定是连续的
print("John" in "John Hello")
>> True
print("Jon" in "Jon Snow")
print("Jon" not in "Jon Snow")
print(not "Jon" in "Jon Snow") # 不推荐使用
3.5 移除字符串左右两侧的符号strip
默认去掉字符串左右两侧空格
msg=' david'
res=msg.strip()
print(msg) # 不会改变原值
print(res) # 是产生了新值
info = " admin "
new_info = info.strip()
print(info)
print(new_info)
.strip()就是用来处理.之前的字符串, 会把之前的字符串中的左右两侧的符号移除, 默认移除左右两侧的空格
print("++++hello ".strip())
print("++++hello&&&&".strip("+&"))
.strip(self,chars) # chars表示要去除的符号, 不写默认是去除空格
默认去掉的空格
msg='****admin****'
print(msg.strip('*'))
strip只去除两边,不去中间
msg='****a*****dmin****'
print(msg.strip('*'))
msg='**/*=-**admin**-=()**'
print(msg.strip('*/-=()')), #把要去的符号, 连着写在()即可
3.6 应用
inp_user=input('your name>>: ').strip() # inp_user=" david"
# 这样直接在输入名字和密码时, 就对输入做处理, 去掉左右两侧的空格, 避免用户输入账号密码时有空格, 导致登录失败
inp_password = input("password: ").strip()
if inp_user == 'admin' and inp_password == 'admin':
print("login ok")
else:
print("login failed")
3.7 切分split
把一个字符串按照某种分隔符进行切分,得到一个列表. 针对于有规律的字符串
而前面切片的结果仍然是一个字符串, 从大的字符串里把多个字符串拷贝出来.
默认分隔符是空格, 把字符串转换成列表
info='david 18 male'
res = info.split()
print(res) >> ['david', '18', 'male']
info = 'david 18 male'
name, age, gender = info.split()
print(name,age,gender) >> david 18 male
info = "name,age,18"
res = info.split(',')
print(res) >> ['david', ' 18', ' male']
.split(self,sep, maxsplits) #sep表示按照哪个字符进行切分
info = 'admin 18 male'
print(info[0:5])
>>> admin
print(info.split())
>>> ['admin', '18', 'male']
指定分隔符
info='david:18:male'
res=info.split(':')
print(res) >> ['david', '18', 'male']
指定分隔次数
info='david:18:male'
res=info.split(':',1) # 1表示只切分一次
print(res)
>> ['david', '18:male']
3.8 循环
info = 'david:18:male' #会把字符串的每一个字符都print一遍
for x in info:
print(x)
3.9 strip,lstrip,rstrip
msg = '****david****'
print(msg.lstrip('*')) >> david****
print(msg.rstrip('*')) >> ****david
print(msg.strip('*')) >> david
3.10 lower,upper
msg='AbbbCCCC'
print(msg.lower()) >> aabbbccc
print(msg.upper()) >> AABBBCCC
3.11 startswith,endswith
print("Jon is king".startswith("Jon")) >> True
print("Jon is king".endswith('king')) >> True
3.12 split,rsplit: 将字符串切成列表
info="david:18:male"
print(info.split(':',1)) # ["david","18:male"] # 默认从左开始切分, 默认以空格为分隔符, 默认把每个分隔符左右的字符转成列表中的一个元素, 1表示只按照分隔符切分一次
print(info.rsplit(':',1)) # ["david:18","male"] # rsplit是从右往左切
3.13 join: 把列表拼接成字符串
要求列表内不能有数字类型元素, 会报错
l=['david', '18', 'male']
res=l[0]+":"+l[1]+":"+l[2] # 不要用加号做字符串拼接, 效率低
res=":".join(l) # 按照某个分隔符号,把元素全为字符串的列表拼接成一个大字符串
print(res)
l = ['IT','Accounting','Finance','Sales']
print(':'.join(l))
info = ["admin",18,"IT"] # 要求列表里必须是字符串, 不能有数字类型, 否则会报错, TypeError: sequence item 1: expected str instance, int found
new_info = ":".join(info)
print(new_info)
info = ["admin","18","IT"]
new_info = ":".join(info)
print(new_info)
3.14 replace
msg="you can you up no can no bb"
print(msg.replace("you","YOU")) # 默认替换所有的you
print(msg.replace("you","YOU",1)) # 只替换从左到右第一个匹配的
3.15 isdigit
判断字符串是否由纯数字整型组成
print('123'.isdigit())
print('12.3'.isdigit())
age = "8.8"
age = int(age)
print(age)
age = input("input your age: ").strip()
if age.isdigit():
age = int(age) # int()只能转纯数字字符串
if age > 18:
print("猜大了")
elif age < 18:
print("猜小了")
else:
print("猜对了")
else:
print("必须输入纯数字")
3.16 find,rfind,index,rindex,count
msg='hello david hahaha'
找到关键字则返回起始索引
print(msg.find('e')) >> 1 # 返回要查找的字符串在大字符串中的起始索引, 如果有重复, 以左侧第一个索引位置为准
print(msg.index('david')) >> 6
找不到
print(msg.find('xxx')) # 返回-1,代表找不到
print(msg.index('xxx')) # 抛出异常 ValueError: substring not found
msg='hello david hahaha david david'
print(msg.count('david')) >> 3 # 统计某个字符/串在大串中出现的次数
3.17 center,ljust,rjust,zfill
print('david'.center(50,'*'))
>> **********************david***********************
print('david'.ljust(50,'*'))
>> david*********************************************
print('david'.rjust(50,'*'))
>> *********************************************david
print('david'.zfill(10))
>> 00000david # 在字符串左侧填充
3.18 expandtabs
msg='hello\tworld'
print(msg.expandtabs(2)) # 设置制表符代表的空格数为2
3.19 captalize,swapcase,title
print("hello world david".capitalize()) #第一个单词的首字母大写
print("Hello WorLd DAvid".swapcase()) #大小写全部互换
print("hello world david".title()) #每个单词的首字母都转成大写
3.20 is其他
print('abc'.islower())
print('ABC'.isupper())
print('Hello World'.istitle())
print('123123aadsf'.isalnum()) # 字符串由字母或数字组成结果为True
print('ad'.isalpha()) # 字符串由字母组成结果为True
print(' '.isspace()) # 字符串由空格组成结果为True.
# identifier用来判断, 标识符是否合法, 也就是是否由字母数字或下划线组成, 且不是数字开头
# 内置的标识符全部合法, 自定义的名字, 比如变量名, 需要判断
print('print'.isidentifier()) # True
print('age_of_david'.isidentifier()) # True
print('1age_of_david'.isidentifier()) # False
num1=b'4' #bytes
num2=u'4' #unicode,python3中无需加u就是unicode
num3='四' #中文数字
num4='Ⅳ' #罗马数字
isdigit只能识别:num1、num2
print(num1.isdigit()) # True
print(num2.isdigit()) # True
print(num3.isdigit()) # False
print(num4.isdigit()) # False
isnumberic可以识别:num2、num3、num4
print(num2.isnumeric()) # True
print(num3.isnumeric()) # True
print(num4.isnumeric()) # True
isdecimal只能识别:num2
print(num2.isdecimal()) # True
print(num3.isdecimal()) # False
print(num4.isdecimal()) # False
4 字符串转义符号
\特殊符号: 将特殊符号转为本身字面意思使用, 取消特殊功能
print("hello\\nworld")
>> hello\nworld
\n: 换行符
print("hello \nworld")
>> hello
>> world
\t: 制表符, 四个空格
print("hello\tworld")
>>hello world # 间隔四个空格
网友评论