02.基本数据类型--数字、字符串

2019-12-11  本文已影响0人  哈哈大圣

基本数据类型--数字、字符串

一、数据类型分类

1).基本的数据类型

  1. 数字:intfloat
  2. 字符串:str
  3. 布尔值:bool
    • True
    • False

2).数据集

  1. 列表:list
  2. 元组:tuple
  3. 字典:dict

每种数据类型的实例都可以直接调用内置函数,python属于弱类型语言,定义变量时不用声明数据类型,变量其实就是一个容器。

二、数字

1).整型int

  1. 没有数字大小的限制,没有类似Java的long类型

  2. 案例演示

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进制数(不是字节)
  1. 数字与字符串类型之间的转换
number = 1234
string = str(number)    #将数字转换为字符串
number = int(string)   #将字符串转换为数字

2).浮点数float

  1. float是浮点数的意思,也就是有小数部分 (Python中没有double类型)
number = 5.3
print(type(number),number)

3).复数

  1. Python复数的表示方法如下:
(2 + 2j)
  1. 复数一般在某些特定领域需要。

三、字符串

字符串一旦创建,不可修改,一旦修改或者拼接,都会造成重新生成字符串

python中字符串和数字不能直接相加

1).字符串常见形式

  1. 字符串的形式:
n1 = "hahadasheng"
n2 = "hahadasheng"
n3 = """hahadasheng"""
n4 = """hahadasheng"""

只要是引号都可以,同时""" """ 既可以用于字符串,亦可以用于多行注释

  1. 字符串一旦创建就不能在被修改,只能另外申请空间储存修改后的字符串。

2).字符串常用内置函数

# 下方使用的案例变量
name = "python"
v = "I like Java and Python"
test = v
  1. 首字母大写
v = name.capitalize()
  1. 全大写
v = name.upper()
v1 = test.isupper()   # 判断是否全部是大小写
  1. 全变小写
v = test.lower() # 英文中所有变小写
v1 = test.islower()   # 判断是否全部是大小写
print(v)
v = test.casefold() # 所有变小写,可以将很多未知的符号对相应变小写。
print(v)
  1. 大小写转换
test = "hahadasheng"
v = test.swapcase()   # 大小写转换
print(v)
  1. 判断前缀
v = test.startswith("haha")   #结果是布尔值
  1. 判断后缀
name = "hahadasheng"
v = name.endswith("haha")   #结果是布尔值
  1. 查找索引对应的字符
test = "hahadasheng"
v = test.index("8") # 必须为字符串,感觉有点怪!!

找到对应的字符串,返回其下标,如果没有则抛出异常

  1. 查找子串第一个位置的索引
test = "hahadasheng"
v = test.find("en")
  1. 替换函数
test = "hahahahahahahaaaaaaaa"

# 将指定字符串替换为指定字符串,全部换
v = test.replace("a","b")
print(v)

# 将指定字符串替换为指定字符串,从左到右指定换参数个
v = test.replace("b","a",2)
print(v)
  1. 分割为指定个数
# 从左到右分割为指定个数,不加个数会将所有的分割,这种分割会去除指定字符串
v = test.split("s",2)

# 从右到左分割为指定个数,不加个数会将所有的分割,这种分割会默认去除空格或空格操作
test.rsplit()
  1. 根据换行符进行分割,布尔值参数确定是否保留换行符
test = "asdfadfasdf\nasdfasdf\nadfasdf"
v = test.splitlines(False)
print(v)
  1. 将字符串中的每一个元素按照指定分隔符进行拼接【常用】
    • 其他数据类型中的元素为字符串也可以 (比如列表)
test = "你是风儿我是沙"
print(test)
v = "_".join(test)  #  你_是_风_儿_我_是_沙
print(v)
  1. 给定了一些非空的字符串(""空白 不属于非空),删除参数给定字符的字符
# 默认移除左边\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")
  1. 判断字符串中是否只包含字母,数字
test = "123"
v = test.isalnum()  # 。
print(v)
  1. 判断字符串中是否只包含字母,汉字
test = "as2df"
v = test.isalpha()
print(v)
  1. 当前字符串是否是数字
test = "二"   # 1,②
v1 = test.isdecimal()   # 当前输入的字符串是否是数字,只支持十进制数
v2 = test.isdigit()     # 当前输入的字符串是否是数字,支持十进制,特殊数字字符
v3 = test.isnumeric()   # 当前输入的字符串是否是数字,支持十进制,特殊数字字符,中文数字
print(v1,v2,v3)

3).字符串常用用法

  1. 获取长度
len("hahadasheng")
  1. for循环
for i in "hahadasheng":
    print(i)
  1. 切片(所有的数据类型都可以用)
test = "hahadasheng"
v = test[0]    # 取字符
t = test[0:2]  # 取指定字符切片,不包括末尾指定的数
c = test[0:-1] # 从取字符切片,末尾倒着数,不包括末尾 (嵌套也可以取)
d = test[2:]   # 从索引2到最后

3).其他函数

  1. 设置字符串总宽度,并将原始内容居中
# def center(
#    self<表示自身,不用使用>,
#    width<代指总长度>,
#    fillchar=None<空白填充,默认字符" ",只能写一个字符,可选变量>
#   )
v = test.center(20, "*")
  1. 设置宽度,并左对齐
v = test.ljust(20,"*")  #与center 功能类似,放在左边
  1. 设置宽度,右对齐
v = test.rjust(20,"*")  #与center 功能类似,放在右边
  1. 寻找子串序列次数
test = "aaa"
v = test.count("aa")   # 去字符串中寻找,寻找子序列的出现次数
print(v)

查询过程会分隔字符串,被找到的子串的子串不会被纳入下一次查找的范围

  1. 寻找子串序列出现的次数,执行开始位置和结束位置 (结束位置不包含)
test = "hahadasheng is very handsome"
v = test.count("da", 5, 6)   # 5这里的位置表示从0开始到第五个开始,6这里的位置表示结束位置,后面两个位置可选,结束位置不包含 [),机制和java一样
  1. 表格化打印
# \为转义字符, \t制表符
test = "username\temail\tpassword\n晓庆\t123@.com\t123\n"

# 以括号内的指定参数个数进行排列,如果遇到\t,自动补齐空格到参数个。
v = test.expandtabs(12)
print(v,len(v))

从开始往后找,找到第一个之后,获取其位置,可以指定开始和结束的位置,结束的位置不包含,如果未找到返回-1。

  1. 字符占位符格式化
test = "i am {name}, age {a}"
print(test)
v = test.format(name="hahadasheng",a=18)
print(v)

格式化,将一个字符串中的占位符替换为指定的值,没有数据类型的限制

  1. 数字占位符格式化
test = "i am {0}, age {1}"
print(test)
v = test.format("hahadasheng",18)
print(v)

如果占位符里面为数字,表示为依次进行替换 (不建议与有指定名字的占位符混搭,容易出错)

  1. 字典格式化
test = "i am {name}, age {a}"
v1 = test.format(name="df",a=10)
v2 = test.format_map({"name": "hahadasheng", "a": 19})  #传入的为字典,固定格式
  1. 判断是否存在不可显示的字符,如果含有,返回False
#\t   制表符(不可显示)
#\n   换行(不可显示)
test = "oiuas\tdfkj"
v = test.isprintable()  #
print(v)
  1. 判断是否全部是空格
test = ""
v = test.isspace()
print(v)

""这种不算空格

  1. 判断是否是标题 (首字母全部大写)
test = "Return True if all cased characters in S are uppercase and there is"
v1 = test.istitle()
print(v1)
  1. 将字符串转换为标题
v2 = test.title()
print(v2)
  1. 对应关系替换
v = "asidufkasd;fiuadkf;adfkjalsdjf"

# 创建对应关系,可用于替换, 个数必须对应上!!
m = str.maketrans("aeiou", "12345")

# 开始转换
new_v = v.translate(m)
print(new_v)
  1. 分割字符串 (三部分)
test = "testasdsddfg"
v = test.partition("s")    #从左边找到指定的字符串进行分割,分成三份,如果字符串在最开始,以‘’空代替。所以么有lpartition
print(v)
v = test.rpartition("s")   #从右到左找到指定的字符串进行分割,分成三份
print(v)
  1. 字母,数字,下划线 : 标识符 def class
a = "def"

# 判断字符串能否被使用为标识符
v = a.isidentifier()
print(v)

4).字符串符号格式化

  1. 格式化符号

    • %d: 十进制数字
    • %f: 浮点数
    • %s: 字符串、任何值
  2. 使用格式

# 多个值的时候要用括号
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)
  1. 打印浮点数
# 代表只保留后面两位小数
tpl = "percent %.2f" % 99.976234444444444444
print(tpl)
  1. 打印百分比
tpl = "percent %.2f %%" % 99.976234444444444444  # 打印百分比
print(tpl)
  1. 直接打印字典
tpl = "i am %(name)s age %(age)d" % {"name": "hahadasheng", "age": 18}
print(tpl)
  1. 左对齐(+右对齐) 60宽度
msg="i am %(name)+60s my hobby is hahadasheng" %{"name":"lhf"}
print(msg)
  1. 加上颜色
msg="i am \033[43;1m%(name)+60s\033[0m my hobby is hahadasheng" %{"name":"lhf"}
print(msg)
  1. 指定拼接分隔符
print("root","x","0","0",sep=":")

# 等价与如下方式
print("root"+":"+"x"+":"+"0","0")

5).format函数格式化

  1. 一般形式
# 指定参数
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)
  1. 进制转换

后面的参数以10进制为准(x小写的16进制 X大写的16进制),百分数,参数少了不行,多了可以

tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%},{}".format(0x15, 15, 15, 15, 15, 15.87, 2)
print(tpl)
  1. 更多参考
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进制整数
上一篇下一篇

猜你喜欢

热点阅读