美文网首页
7. Python之基本数据类型详解-1

7. Python之基本数据类型详解-1

作者: 随便写写咯 | 来源:发表于2021-01-12 00:01 被阅读0次

    一: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 # 间隔四个空格
    

    相关文章

      网友评论

          本文标题:7. Python之基本数据类型详解-1

          本文链接:https://www.haomeiwen.com/subject/zalraktx.html