02.基本数据类型--数字、字符串
2019-12-11 本文已影响0人
哈哈大圣
基本数据类型--数字、字符串
一、数据类型分类
1).基本的数据类型
- 数字:
int
、float
- 字符串:
str
- 布尔值:bool
True
False
2).数据集
- 列表:
list
- 元组:
tuple
- 字典:
dict
每种数据类型的实例都可以直接调用内置函数,python属于弱类型语言,定义变量时不用声明数据类型,变量其实就是一个容器。
二、数字
1).整型int
-
没有数字大小的限制,没有类似Java的long类型
-
案例演示
a = "123"
print(type(a),a) # type(variable) #查看这个变量的类型
b = int(a)
print(type(b),b)
num = "0011" # 16进制表示
v = int(num, base=16) # base这个表示将16进制表示的数字转换为10进制
print(v)
r = age.bit_length() # bit_lenght当前数字的二进制,至少用n位表示,就是有多少位2进制数(不是字节)
- 数字与字符串类型之间的转换
number = 1234
string = str(number) #将数字转换为字符串
number = int(string) #将字符串转换为数字
2).浮点数float
- float是浮点数的意思,也就是有小数部分 (Python中没有double类型)
number = 5.3
print(type(number),number)
3).复数
- Python复数的表示方法如下:
(2 + 2j)
- 复数一般在某些特定领域需要。
三、字符串
字符串一旦创建,不可修改,一旦修改或者拼接,都会造成重新生成字符串
python中字符串和数字不能直接相加
1).字符串常见形式
- 字符串的形式:
n1 = "hahadasheng"
n2 = "hahadasheng"
n3 = """hahadasheng"""
n4 = """hahadasheng"""
只要是引号都可以,同时
""" """
既可以用于字符串,亦可以用于多行注释
- 字符串一旦创建就不能在被修改,只能另外申请空间储存修改后的字符串。
2).字符串常用内置函数
# 下方使用的案例变量
name = "python"
v = "I like Java and Python"
test = v
- 首字母大写
v = name.capitalize()
- 全大写
v = name.upper()
v1 = test.isupper() # 判断是否全部是大小写
- 全变小写
v = test.lower() # 英文中所有变小写
v1 = test.islower() # 判断是否全部是大小写
print(v)
v = test.casefold() # 所有变小写,可以将很多未知的符号对相应变小写。
print(v)
- 大小写转换
test = "hahadasheng"
v = test.swapcase() # 大小写转换
print(v)
- 判断前缀
v = test.startswith("haha") #结果是布尔值
- 判断后缀
name = "hahadasheng"
v = name.endswith("haha") #结果是布尔值
- 查找索引对应的字符
test = "hahadasheng"
v = test.index("8") # 必须为字符串,感觉有点怪!!
找到对应的字符串,返回其下标,如果没有则抛出异常
- 查找子串第一个位置的索引
test = "hahadasheng"
v = test.find("en")
- 替换函数
test = "hahahahahahahaaaaaaaa"
# 将指定字符串替换为指定字符串,全部换
v = test.replace("a","b")
print(v)
# 将指定字符串替换为指定字符串,从左到右指定换参数个
v = test.replace("b","a",2)
print(v)
- 分割为指定个数
# 从左到右分割为指定个数,不加个数会将所有的分割,这种分割会去除指定字符串
v = test.split("s",2)
# 从右到左分割为指定个数,不加个数会将所有的分割,这种分割会默认去除空格或空格操作
test.rsplit()
- 根据换行符进行分割,布尔值参数确定是否保留换行符
test = "asdfadfasdf\nasdfasdf\nadfasdf"
v = test.splitlines(False)
print(v)
-
将字符串中的每一个元素按照指定分隔符进行拼接【常用】
- 其他数据类型中的元素为字符串也可以 (比如列表)
test = "你是风儿我是沙"
print(test)
v = "_".join(test) # 你_是_风_儿_我_是_沙
print(v)
- 给定了一些非空的字符串(""空白 不属于非空),删除参数给定字符的字符
# 默认移除左边\t \r \n 空白
test = "\r\n\t del I am your God"
v = test.lstrip()
print(v) #del I am your God
# 有参数就从左到右找有没有对应的字符,有就删除,直到遇见参数没有的字符的就中断
test = "del I am your God"
v = test.lstrip("del ")
print(v) #I am your God
# 右边的操作,和上述类似
v = test.rstrip()
v = test.rstrip("del")
# 两边同时操作,和上述类似
v = test.strip()
v = test.strip("xa")
- 判断字符串中是否只包含字母,数字
test = "123"
v = test.isalnum() # 。
print(v)
- 判断字符串中是否只包含字母,汉字
test = "as2df"
v = test.isalpha()
print(v)
- 当前字符串是否是数字
test = "二" # 1,②
v1 = test.isdecimal() # 当前输入的字符串是否是数字,只支持十进制数
v2 = test.isdigit() # 当前输入的字符串是否是数字,支持十进制,特殊数字字符
v3 = test.isnumeric() # 当前输入的字符串是否是数字,支持十进制,特殊数字字符,中文数字
print(v1,v2,v3)
3).字符串常用用法
- 获取长度
len("hahadasheng")
- for循环
for i in "hahadasheng":
print(i)
- 切片(所有的数据类型都可以用)
test = "hahadasheng"
v = test[0] # 取字符
t = test[0:2] # 取指定字符切片,不包括末尾指定的数
c = test[0:-1] # 从取字符切片,末尾倒着数,不包括末尾 (嵌套也可以取)
d = test[2:] # 从索引2到最后
3).其他函数
- 设置字符串总宽度,并将原始内容居中
# def center(
# self<表示自身,不用使用>,
# width<代指总长度>,
# fillchar=None<空白填充,默认字符" ",只能写一个字符,可选变量>
# )
v = test.center(20, "*")
- 设置宽度,并左对齐
v = test.ljust(20,"*") #与center 功能类似,放在左边
- 设置宽度,右对齐
v = test.rjust(20,"*") #与center 功能类似,放在右边
- 寻找子串序列次数
test = "aaa"
v = test.count("aa") # 去字符串中寻找,寻找子序列的出现次数
print(v)
查询过程会分隔字符串,被找到的子串的子串不会被纳入下一次查找的范围
- 寻找子串序列出现的次数,执行开始位置和结束位置 (结束位置不包含)
test = "hahadasheng is very handsome"
v = test.count("da", 5, 6) # 5这里的位置表示从0开始到第五个开始,6这里的位置表示结束位置,后面两个位置可选,结束位置不包含 [),机制和java一样
- 表格化打印
# \为转义字符, \t制表符
test = "username\temail\tpassword\n晓庆\t123@.com\t123\n"
# 以括号内的指定参数个数进行排列,如果遇到\t,自动补齐空格到参数个。
v = test.expandtabs(12)
print(v,len(v))
从开始往后找,找到第一个之后,获取其位置,可以指定开始和结束的位置,结束的位置不包含,如果未找到返回-1。
- 字符占位符格式化
test = "i am {name}, age {a}"
print(test)
v = test.format(name="hahadasheng",a=18)
print(v)
格式化,将一个字符串中的占位符替换为指定的值,没有数据类型的限制
- 数字占位符格式化
test = "i am {0}, age {1}"
print(test)
v = test.format("hahadasheng",18)
print(v)
如果占位符里面为数字,表示为依次进行替换 (不建议与有指定名字的占位符混搭,容易出错)
- 字典格式化
test = "i am {name}, age {a}"
v1 = test.format(name="df",a=10)
v2 = test.format_map({"name": "hahadasheng", "a": 19}) #传入的为字典,固定格式
- 判断是否存在不可显示的字符,如果含有,返回False
#\t 制表符(不可显示)
#\n 换行(不可显示)
test = "oiuas\tdfkj"
v = test.isprintable() #
print(v)
- 判断是否全部是空格
test = ""
v = test.isspace()
print(v)
""这种不算空格
- 判断是否是标题 (首字母全部大写)
test = "Return True if all cased characters in S are uppercase and there is"
v1 = test.istitle()
print(v1)
- 将字符串转换为标题
v2 = test.title()
print(v2)
- 对应关系替换
v = "asidufkasd;fiuadkf;adfkjalsdjf"
# 创建对应关系,可用于替换, 个数必须对应上!!
m = str.maketrans("aeiou", "12345")
# 开始转换
new_v = v.translate(m)
print(new_v)
- 分割字符串 (三部分)
test = "testasdsddfg"
v = test.partition("s") #从左边找到指定的字符串进行分割,分成三份,如果字符串在最开始,以‘’空代替。所以么有lpartition
print(v)
v = test.rpartition("s") #从右到左找到指定的字符串进行分割,分成三份
print(v)
- 字母,数字,下划线 : 标识符 def class
a = "def"
# 判断字符串能否被使用为标识符
v = a.isidentifier()
print(v)
4).字符串符号格式化
-
格式化符号
-
%d
: 十进制数字 -
%f
: 浮点数 -
%s
: 字符串、任何值
-
-
使用格式
# 多个值的时候要用括号
msg = "i am %s my hobby is %s" % ("hahadasheng","java")
print(msg)
# %s可以接受任何值
msg = "i am %s my hobby is %s" % ("hahadasheng",1)
# 接受列表
msg = "i am %s my hobby is %s" % ("hahadasheng",[1,2])
print(msg)
name="hahadasheng"
age=19
# %d代表整型数字,也可接受浮点数(转换成int)
msg="i am %s my hobby is %d" % (name, age)
print(msg)
- 打印浮点数
# 代表只保留后面两位小数
tpl = "percent %.2f" % 99.976234444444444444
print(tpl)
- 打印百分比
tpl = "percent %.2f %%" % 99.976234444444444444 # 打印百分比
print(tpl)
- 直接打印字典
tpl = "i am %(name)s age %(age)d" % {"name": "hahadasheng", "age": 18}
print(tpl)
- 左对齐(+右对齐) 60宽度
msg="i am %(name)+60s my hobby is hahadasheng" %{"name":"lhf"}
print(msg)
- 加上颜色
msg="i am \033[43;1m%(name)+60s\033[0m my hobby is hahadasheng" %{"name":"lhf"}
print(msg)
- 指定拼接分隔符
print("root","x","0","0",sep=":")
# 等价与如下方式
print("root"+":"+"x"+":"+"0","0")
5).format函数格式化
- 一般形式
# 指定参数
tpl = "i am {name}, age {age}, really {name}".format(name = "seven", age = 18)
# 字典方式 ** 代表字典
tpl = "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18})
# *代表列表
tpl = "i am {:s}, age {:d}".format(*["seven", 18])
tpl = "i am {:s}, age {:d}".format("seven", 18) # 与上述["seven", 18]一样
l=["seven", 18]
tpl = "i am {:s}, age {:d}".format(*l)
- 进制转换
后面的参数以10进制为准(x小写的16进制 X大写的16进制),百分数,参数少了不行,多了可以
tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%},{}".format(0x15, 15, 15, 15, 15, 15.87, 2)
print(tpl)
- 更多参考
tpl = "i am {}, age {}, {}".format("seven", 18, "hahadasheng")
tpl = "i am {}, age {}, {}".format(*["seven", 18, "hahadasheng"])
tpl = "i am {0}, age {1}, really {0}".format("seven", 18)
tpl = "i am {0}, age {1}, really {0}".format(*["seven", 18])
tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18)
tpl = "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18}) #**代表字典
tpl = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1, 2, 3], [11, 22, 33])
tpl = "i am {:s}, age {:d}, money {:f}".format("seven", 18, 88888.1)
tpl = "i am {:s}, age {:d}".format(*["seven", 18]) #*代表传入的为列表
tpl = "i am {name:s}, age {age:d}".format(name="seven", age=18)
tpl = "i am {name:s}, age {age:d}".format(**{"name": "seven", "age": 18})
tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
tpl = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15)
tpl = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15)
四、数字,字符串相关的加减乘除
1).字符串加法
n1 = "a"
n2 = "b"
n3 = "c"
n4 = n1 + n2 + n3 # "abc"
2).字符串乘法:
n1 = "a"
n2 = n1 * 3 # "aaa"
3).数字
n1 = 9
n2 = 2
n3 = n1 + n2
n3 = n1 - n2
n3 = n1 * n2
n3 = n1 / n2
n3 = n1 % n2 # 求余
n3 = n1 ** n2 # 这个表示n1的n2次方
n3 = n1 // na # 去除小数部分的值
五、补充:进制转换
1).整数之间的进制转换
hex(16) # 10进制转16进制
oct(8) # 10进制转8进制
bin(8) # 10进制转2进制
2).字符串转整数:
int("10") # 字符串转换成10进制整数
int("10",16) # 字符串转换成16进制整数
int("0x10",16) # 字符串转换成16进制整数
int("10",8) # 字符串转换成8进制整数
int("010",8) # 字符串转换成8进制整数
int("10",2) # 字符串转换成2进制整数