您的位置:首页 > 编程语言 > Python开发

007.Python基础数据类型之数字与字符串

2020-07-10 19:19 232 查看

文章目录

  • 三、数字类型数据
  • (二)总结:
  • 四、string字符串类型
  • (2)需要掌握的操作:
  • ⑤split(), rsplit()
  • ⑥join():
  • ⑦replace():
  • ⑧isdigit():
  • (3)了解的操作:
  • (二)该类型总结
  • (二)该类型总结
  • 一、补充:for+range()

    (一)使用while循环打印多个值时,操作会稍显繁琐:

    count = 0
    while count < 3:
    print("=" * 10)
    print("Step 1")
    print("Step 2")
    count += 1   # 实现将内容循环打印多次

    (二)使用for循环可以更简单的实现这个操作:

    for x in "a" * 3:
    # in后面跟一个有多个元素的字符串或者容器类型的数据,可以实现与元素数相同的循环次数
    print("=" * 10)
    print("Step 1")
    print("Step 2")

    (三)使用range()可以制造一个列表,更方便for循环进行取值:

    range(start, stop[, step]) -> range object
    #    起始位置   结束位置  步长         range()制造的列表是左闭右开的区间,注意末尾数据不能取到!!
    
    >>> range(1,5,2) # 起始位置,结束位置,步长
    [1, 3]
    >>>
    >>> range(1,5) # 省略步长,默认为1
    [1, 2, 3, 4]
    
    range(stop) -> range object
    >>> range(5) # 省略起始位置与步长,默认起始位置为0,步长为1
    [0, 1, 2, 3, 4]

    二、可变与不可变类型

    (一)可变类型:

    值改变,id不变,说明改变的是原值,是可变类型。

    可变类型的数据:list、dictionary。

    (二)不可变类型:

    值改变,id也改变,说明是产生了新的值,关联了新的内存空间,原值是不可变类型。

    不可变类型的数据:integer、float、tuple、set、bool。

    三、数字类型数据

    在python3中,与数字有关的数据类型有两个,一个是整型integer,另一个是浮点型float,由于斗鱼数字相关,我们将他们归纳为数字类型来理解、记忆。

    (一)基本使用

    1.用途:

    整型int:个数、年龄、号码、年份、月份等与整数相关的数据记录。

    浮点型float:薪资、身高、体重等与小数相关的数据记录。

    2.定义方式:

    1) 整型
    age = 18  # 本质上:age = int(18)
    a) 数据类型转换:
    int可以把纯数字组成的字符串转换成int类型,不可以包含小数点!
    int("18")  # 18
    
    2) 浮点型
    salary = 3.3  # 本质上:salary = float(3.3)
    a) 数据类型转换:
    float可以将浮点型数组成的字符串转换成float类型。
    float("1.8")  # 1.8

    了解:十进制的整数可以转换成其他进制的数字

    print(bin(11))  # 0b1011
    print(oct(11))  # 0o13
    print(hex(11))  # 0xb

    3.常用的操作及内置方法

    数字类型常用于算数运算以及比较运算。

    (二)总结:

    1.存一个值or存多个值

    int于float都只能存一个值。

    2.可变or不可变

    int于float都是不可变类型。

    四、string字符串类型

    (一)基本使用

    1.用途:

    对事物性质、状态的描述,例如名字、性别、国籍等等。

    2.定义方式:

    (1)直接定义:在引号(’ ‘, " ", ‘’’ ‘’’, “”" “”")内包含一串字符串。

    s = "hello"  # 实质上是:s = str("hello")

    (2)数据类型转换:str功能可以将任意数据类型转换成str类型。

    res = str([1, 2, 3])  # "[1, 2, 3]"

    3.常用的操作及其内置方法

    (1)优先掌握的操作

    ①按照索引取值:

    可以正向取、反向取,只能取。

    s = "hello python!"
    # 字符串s共13个元素,正向索引位置为  0   1   2   3 ... 12
    #                 反向索引位置为 -13 -12 -11 -10 ... -1
    1) 正向取
    s[6]  # "p"
    
    2) 反向取
    s[-5]  # "t"
    
    3) 只能取
    s[0] = "H"  # 报错TypeError: 'str' object does not support item assignment
    ②切片:

    顾头不顾尾,步长,这个与之前说的range()取值的范围类似。

    切片的本质是从字符串中拷贝出一个字字符串。

    注意!!!:起始位置的绝对位置必须在结束位置之前,否则无法正常取值!

    a) [start:stop:step]
    起始位置:可以省略,省略后默认是0
    结束位置:可以省略,省略后默认是-1
    步长:可以省略,省略后默认是1,也可以设置负数,逆序截取
    s = "hello python!"
    # 字符串s共13个元素,正向索引位置为  0   1   2   3 ... 12
    #                 反向索引位置为 -13 -12 -11 -10 ... -1
    1) 顾头不顾尾,省略步长时默认为1
    s[0:9]  # 'hello pyt'
    
    2) 设置步长以及其他使用方法
    s[:9:2]  # 'hlopt'
    
    s[-2:2:1]  # ''  #  无内容,起始位置的绝对位置在结束位置之后了。
    
    s[:]  # "hello python!"  # 完整的拷贝一个字符串
    
    s[::]  # "hello python!"  # 完整的拷贝一个字符串,后面一个冒号可以省略
    
    3) 逆序截取以及反向步长取值,
    s[::-1]  # '!nohtyp olleh'
    
    s[-2:-2:-1]  # 'nohtyp ol'
    ③长度len():

    用于获取字符串的长度,注意空格也属于字符串。

    s = "hello python!"
    len(s)  # 13
    ④成员运算in和not in:

    判断一个子字符串是否在目标字符串中。

    s = "hello python!"
    print("hell" in s)  # True
    print("HELL" not in s)  # True
    ⑤移除字符strip():

    移除字符串首尾指定的字符,默认移除的是空格,得出的结果是新的字符串,未改变原字符串。

    1) 括号内不指定字符,默认移除的首尾空白字符(空格,\n换行符,\t纵向制表符)
    >>> str1="    zhangsan is not lisi!  /t /n  "
    >>> str1.strip()  # 默认去掉的是字符串左右两端的空白字符串
    'zhangsan is not lisi!  /t /n'
    
    >>> str1.strip("! /t/n")  # 组合去除字符串,则须将所有需去除的字符串都列出,包括\t \n
    'zhangsan is not lisi'
    
    2) 括号内指定字符,则移除首尾指定的字符(实现原理:根据指定的一个或多个字符,在字符串的左右两边开始寻找,碰到第一个不是指定的字符串的字符后,就会停下来)
    >>> str2="****zhangsan****"
    >>> str2.strip("*")
    'zhangsan'
    # 使用案例:
    user = input("用户名: ").strip()  # 输入内容中误输入空格,可被纠正
    password = input("密码: ").strip()
    if user == "zhangsan" and password == "123":
    print("账号密码正确")
    else:
    print("账号或密码错误")
    ⑥切分split():

    注意:切分的结果是列表数据类型。

    1) 括号内不指定字符,默认是以空格作为切分符号。
    >>> str3="hello world"
    >>> str3.split()
    ['hello', 'world']
    
    2) 括号内指定分隔符号及切分次数,则按照括号内指定的字符切割字符串,默认的切分次数是全部切分。
    >>> ip1="192.168.1.1"
    >>> ip1.split(".",2)
    ['192', '168', '1.1']
    ⑦循环取值:

    字符串可以被for循环遍历取值。

    >>> str4="张三VS李四"
    >>> for i in str4:
    ...     print(i)
    ...
    张
    三
    V
    S
    李
    四

    (2)需要掌握的操作:

    ①strip(), lstrip(), rstrip()

    移除两端指定字符,只移除左边指定字符,只移除右边指定字符。

    >>> str1="****zhangsan****"
    
    >>> str1.strip("*")
    'zhangsan'
    >>> str1.lstrip("*")
    'zhangsan****'
    >>> str1.rstrip("*")
    '****zhangsan'
    ②lower(), upper()

    将字符串全部变为小写/大写。

    >>> str2="My Name Is Zhangsan!"
    >>> str2.lower()
    'my name is zhangsan!'
    >>> str2.upper()
    'MY NAME IS ZHANGSAN!'
    ③startswith(), endswith()

    检测开头字符,检测结尾字符。

    >>> str3="zhangsan lisi"
    
    >>> str3.startswith("z")  # 判断字符串是否以指定的字符开头,结果为布尔值True or False。
    True
    >>> str3.startswith("i")
    False
    >>> str3.endswith("i")  # 判断字符是否以指定的字符结尾,结果为布尔值True or False。
    True
    ④格式化输出的三种方式
    A.%s的方式:

    格式化传的值必须与占位符%s意义对应。

    >>> str4="my name is {name}, my age is {age}!"
    >>> str4.format(age=99,name="zhangsan")
    'my name is zhangsan, my age is 99!'
    
    >>> str4="my name is {name}{name1}{name}, my age is {age}!"
    >>> str4.format(age=99,name="zhangsan",name1="lisi")
    'my name is zhangsanlisizhangsan, my age is 99!'
    B.format的方式:

    format可以不依赖顺序进行传值,可以按照参数进行传值。

    # 类似%s的用法,传入的值会按照位置与{}一一对应
    >>> str4="my name is {}, my age is {}!".format("zhangsan",99)
    >>> str4
    'my name is zhangsan, my age is 99!'
    
    # 把format传入的多个值当作一个列表,然后用{索引}取值
    >>> str4="my name is {0}, my age is {1}!".format("zhangsan",99)
    >>> str4
    'my name is zhangsan, my age is 99!'
    
    >>> str4="my name is {1}, my age is {0}!".format("zhangsan",99)
    >>> str4
    'my name is 99, my age is zhangsan!'
    
    >>> str4="my name is {1}, my name is {1}!".format("zhangsan",99)
    >>> str4
    'my name is 99, my name is 99!'
    C.f-string的方式

    python3.6的新特性,更高效简洁的传值方式。

    name = "tom"
    age = 2
    
    print(f"猫的名字叫{name},今年{age}岁了")  # 猫的名字叫tom,今年2岁了
    
    1) 格式化时可以使用函数,函数必须在{}内部
    print(F"猫的名字叫{name.upper()},今年{age}岁了")  # 猫的名字叫TOM,今年2岁了
    
    2) 格式化时可以使用字典
    cat = {"name": "tom", "age": 2}
    
    print(F"猫的名字叫{cat['name']},今年{cat['age']}岁了")  # 猫的名字叫tom,今年2岁了
    
    3) f包含的字符串可以放到多行
    print(f"猫的名字叫{name}"\
    f",今年{age}岁了")  # 猫的名字叫tom,今年2岁了
    
    4) {}内不能有\以及#
    
    5) 显示{}以及%需要外加相同的字符转义
    print(f'my name is {{egon}}')
    
    print('胜率是 %s%%' %70)
    ⑤split(), rsplit()

    正向切分(左->右),rsplit() 相当于reverse split() 逆向切分(右->左)。

    # split()会按照从左到右的顺序对字符串进行切分,可以指定切分的次数,切分的结果是列表类型数据
    >>> str5="zhangsan/love/lisi"
    >>> str5.split("/",1)
    ['zhangsan', 'love/lisi']
    
    # rsplit()与split()相反,从右往左切割,可以指定切割次数,切分结果为列表类型数据
    >>> str5="zhangsan/love/lisi"
    >>> str5.rsplit("/",1)
    ['zhangsan/love', 'lisi']
    ⑥join():

    字符串的拼接操作,从可迭代对象中取出多个字符串,然后按照指定的分隔符进行拼接,拼接的结果为字符串。

    >>> "%".join("zhangsan")  # 从字符串“zhangsan”中取出多个字符串,然后按照%作为分隔符号进行拼接
    'z%h%a%n%g%s%a%n'
    
    >>> "%".join("Hello Python!")# 从字符串“Hello Python!”中取出多个字符串,然后按照%作为分隔符号进行拼接
    'H%e%l%l%o% %P%y%t%h%o%n%!'
    
    >>> "*".join(["我","秦始皇","打钱"])  # 从列表中取出多个字符串,然后按照“*”作为分隔符号进行拼接
    '我*秦始皇*打钱'
    
    >>> "秦始皇".join(["我","打钱","长生不老"])
    '我秦始皇打钱秦始皇长生不老'
    ⑦replace():

    使用新的字符串,替代旧字符串中的指定字符,可以同时指定修改个数。

    >>> str7="my name is zhangsan, my age is 99"
    >>> str7.replace("99","66")  #  语法:replace("原内容",“新内容”)
    'my name is zhangsan, my age is 66'
    
    >>> str7.replace("my","My",1)  #  指定修改个数,只把一个my改为My.
    'My name is zhangsan, my age is 99'
    ⑧isdigit():

    判断字符串是否是纯数字,返回值为布尔值True或False。

    >>> str8="19491001"
    >>> str8.isdigit()
    True
    
    >>> str8="1949.10.01"
    >>> str8.isdigit()  #  说明浮点型无法被判断,只能判断整型。
    False

    (3)了解的操作:

    ①find(), rfind(), index(), rindex(), count():

    字符查找及统计操作。

    1) find():在指定范围内查找子字符串的起始索引,找得到则返回数字1,找不到则就会-1;
    rfind()=> reverse find()与相当于出一个反转的find()
    print("=abcdefab".find("ab")) #   1  查找一个子字符串在大字符串中出现的起始位置,找到返回数字1
    print("=adcabdefab".find("ab",0,5)) #  -1  查找一个子字符串在大字符串中出现的起始位置,找不到返回数字-1
    print("=adcabdefab".rfind("ab")) # 从后往前查找一个子字符串在大字符串中出现的起始位置
    
    2) index(): 用法同find,找不到报错
    rindex():用法同rfind,找不到报错
    
    3) count():统计字符串在大字符串中出现的次数
    >>> msg = "hello everyone"
    >>> msg.count('e')  # 统计字符串e出现的次数
    4
    ②center(), ljust(), rjust(), zfill()

    字符填充操作。

    >>> name='tony'
    >>> name.center(30,'-')  # 总宽度为30,字符串居中显示,不够用-填充
    -------------tony-------------
    >>> name.ljust(30,'*')  # 总宽度为30,字符串左对齐显示,不够用*填充
    tony**************************
    >>> name.rjust(30,'*')  # 总宽度为30,字符串右对齐显示,不够用*填充
    **************************tony
    >>> name.zfill(50)  # 总宽度为50,字符串右对齐显示,不够用0填充
    0000000000000000000000000000000000000000000000tony
    ③expandtabs()

    修改制表符代表的空格数。

    >>> name = 'tony\thello'  # \t表示制表符(tab键)
    >>> name
    tony    hello
    >>> name.expandtabs(1)  # 修改\t制表符代表的空格数
    tony hello
    ④captalize(), swapcase(), title():

    字符大小写转换操作。

    1) captalize:首字母大写
    >>> message = 'hello everyone nice to meet you!'
    >>> message.capitalize()
    Hello everyone nice to meet you!
    2) swapcase:大小写翻转
    >>> message1 = 'Hi girl, I want make friends with you!'
    >>> message1.swapcase()
    hI GIRL, i WANT MAKE FRIENDS WITH YOU!
    3) title:每个单词的首字母大写
    >>> msg = 'dear my friend i miss you very much'
    >>> msg.title()
    Dear My Friend I Miss You Very Much
    ⑤is数字系列
    #在python3中
    num1 = b'4' #bytes
    num2 = u'4' #unicode,python3中无需加u就是unicode
    num3 = '四' #中文数字
    num4 = 'Ⅳ' #罗马数字
    
    #isdigt:bytes,unicode
    >>> num1.isdigit()
    True
    >>> num2.isdigit()
    True
    >>> num3.isdigit()
    False
    >>> num4.isdigit()
    False
    
    #isdecimal:uncicode(bytes类型无isdecimal方法)
    >>> num2.isdecimal()
    True
    >>> num3.isdecimal()
    False
    >>> num4.isdecimal()
    False
    
    #isnumberic:unicode,中文数字,罗马数字(bytes类型无isnumberic方法)
    >>> num2.isnumeric()
    True
    >>> num3.isnumeric()
    True
    >>> num4.isnumeric()
    True
    
    # 三者不能判断浮点数
    >>> num5 = '4.3'
    >>> num5.isdigit()
    False
    >>> num5.isdecimal()
    False
    >>> num5.isnumeric()
    False
    
    '''
    总结:
    最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
    如果要判断中文数字或罗马数字,则需要用到isnumeric。
    '''
    ⑥is其他用法:
    >>> name = 'tony123'
    >>> name.isalnum() #字符串中既可以包含数字也可以包含字母
    True
    >>> name.isalpha() #字符串中只包含字母
    False
    >>> name.isidentifier()
    True
    >>> name.islower()  # 字符串是否是纯小写
    True
    >>> name.isupper()  # 字符串是否是纯大写
    False
    >>> name.isspace()  # 字符串是否全是空格
    False
    >>> name.istitle()  # 字符串中的单词首字母是否都是大写
    False

    (二)该类型总结

    1.存值个数

    字符串类型只能存一个值。

    2.是否有序

    字符串是有序的。

    3.是否可变

    字符串是不可变的。

    断浮点数

    num5 = ‘4.3’
    num5.isdigit()
    False

    num5.isdecimal()
    False

    num5.isnumeric()
    False

    ‘’’
    总结:
    最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
    如果要判断中文数字或罗马数字,则需要用到isnumeric。
    ‘’’

    
    ##### ⑥is其他用法:
    
    ```python
    >>> name = 'tony123'
    >>> name.isalnum() #字符串中既可以包含数字也可以包含字母
    True
    >>> name.isalpha() #字符串中只包含字母
    False
    >>> name.isidentifier()
    True
    >>> name.islower()  # 字符串是否是纯小写
    True
    >>> name.isupper()  # 字符串是否是纯大写
    False
    >>> name.isspace()  # 字符串是否全是空格
    False
    >>> name.istitle()  # 字符串中的单词首字母是否都是大写
    False

    (二)该类型总结

    1.存值个数

    字符串类型只能存一个值。

    2.是否有序

    字符串是有序的。

    3.是否可变

    字符串是不可变的。

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: