【python数据类型-字符串】有序序列& 可变数据类型

  • 1.字符串定义
  • 三种表示方式:单引号(‘’),双引号(" "),三引号(‘’‘ ’‘’) 
    • 三引号可以多行,单引号和双引号多行需要使用()
      
      
      
      r_single = 'text'
      
      
      r2_double = "dewdwdw dwqdwqdwqdwqdwedwqwdwqdwqdwq" \
           "(抽取当前我带我去到我的期望的期望的味道我确定我的dwqdwqdqw)"
      
      r3_triple = '''
          大的期望的期望的味道我的的期望的期望但我确定我去到我
          的氛围欺负我确定期望的期望的期望的当前我带我去但我确定期望
      '''
      
  • 创建空字符串,str1 = " "
  • 创建非空字符串,三种方式如下
    • str1 = "Hello,Python"
    • str2 = str(obj)    obj可以是任何数据类型
    • str3 = str(obj,'utf-8') 
2.字符格式化方式
  • 方式一:%占位符
    • 语法:%[+][-][0][m][.n]type
    • type为字符串
      • 场景1 :无format,单个变量
        
        name = "Mona"
        
        print("我的名字是%s"%name)
        
        
        场景2: format .n取变量前n个字符
        
        name = "Python"
        
        print("前3个字符是%.3s"%name)  # 前3个字符是Pyt
    • type为整数
      • 场景1: 无format,多个变量
        
        i = 1
        
        j = 2
        
        print("%d*%d=%d"%(i,j,i*j))  # 1*2=2
        
        场景2: 对齐宽度m,不足补0
        
        a = 123
        
        print("宽度是5的数是%05d"%a)  # 宽度是5的数是00123
        
        
    • type为浮点数
      • 场景1: 无format
        a = 1
        print("这个数是%f"%a)  # 这个数是1.000000
        
        场景2: 保留小数点后n位
        
        a = 1
        print("这个数是%.2f"%a)  # 这个数是1.00
        
        
  • 方式二:string.format(变量1,,,,)   Python2.7-3.5版本
    • string的语法:{[index][:[[filter]align][sign][#][m][,][.n][type]]}
    • 无参数
      • 1.参数和引用个数一致即按照顺序输出
        a = 1
        name = "Mona"
        
        print("{}号队员的名字是{}".format(a, name))

        
        
    • 有参数
      • 1.参数个数不足:

        
        print(“{0}{1}{0}”.format(1,2))
  # 121
        
        2.参数顺序更换:

        print(“{2}{1}{0}”.format(1,2,3)) #321
        
        
3.参数是**kwargs
        print(
“{name}{age}{sex}”.format(name=“小明”,age=18,sex=‘man’)
)
        
        4.参数是元组

        t= ("Mona","John")
        print("{0[0]}的朋友是{0[1]}".format(t))
        

        5.参数是字典

        d = {‘name’:’w,’age’:18}

        print(“{0[‘name‘}{0[‘age’}“.format(d))

  • 方式三(推荐):F-String   Python3.5以上
    • 语法:{content:format}
    • content填入变量
      • 例1:
        name = "python"
        
        age = 27
        
        work = 3
        
        print(f"这位菜鸟的名字是{name},年龄是{age},已经工作了{work}还是一无所获")
        
        最终输出结果:
            
            print(f"这位菜鸟的名字是{name},年龄是{age},已经工作了{work}还是一无所获")
        ------------------------------------------------------------------------
        
        例2:
        
        list1 = [10, 'hello', 27]
        
        for i, j in enumerate(list1):
        
            print(f"列表第{i+1}个元素的值是:{j}")
        
        最终输出结果是:
            
            列表第1个元素的值是:10
            列表第2个元素的值是:hello
            列表第3个元素的值是:27
        
    • content填入函数
      • str1 = "hello,python"
        
        print(f"字符串是{str1.upper()}")  # 字符串是HELLO,PYTHON
    • content填入表达式
      • print(f"最终加和是:{12*5+10}")  # 最终加和是:70
    • content引号,大括号,反斜杠
      • 大括号内的引号和括号外的引号符不可冲突
        • 方式1:
          
              print(f"字符串是:{'hello'}")
          
          方式2:
          
              print(f'字符串是:{"hello"}')
          方式3:
          
              print(f"""字符串是:{"I'm happy"}""")
          
          方式4:
          
              print(f'''字符串是:{"I'm happy"}''')
      • content大括号还需要展示大括号
print(f'''{{5}}字符串是:{"I'm happy"}''')


最终输出结果是:

    {5}字符串是:I'm happy
  • content大括号内不可使用转义字符,括号外可使用
例1: 括号外使用\,展示后面符号本身的意义

print(f'''he\'ll be happy,{"and I'm happy"}''')

最终输出结果是:

        he'll be happy,and I'm happy

--------------------------------------------------------------
例2: \b退格

print(f'''he\'ll be happy\b{"I'm happy"}''')

最终输出结果是:
    
        he'll be happI'm happy
---------------------------------------------------------------
例3: \n换行
print(f'''he is happy\n{"I'm happy"}''')

最终输出结果是:

        he is happy
        I'm happy
--------------------------------------------------------------
例4: \r换行符,光标回退开始位置
print(f'''he is happy\r{"I'm happy"}''')

最终输出结果是:

        I'm happy
        
  • format自定义格式{[index][:[[filter]align][sign][#][m][千位分隔符][.n][type]]}
    • 对齐align 
    • 宽度m
    • 符号
    • 补零
    • 精度[.n]
      • 对于浮点数,保留小数点后2位
        
        a = 12.0
        
        print(f"{a:.2f}")  # 12.00
    • 千位分隔符
      • 前提:需要和格式类型搭配使用
      • 分隔符1:  , 仅适用于float,complex, 十进制
        • 1. 和十进制数搭配使用
          
          def add_commas(number):
              
              return f"{number:,d}"  # 78,934,654,383
          
          
          number = 78934654383
          
          # 调用函数
          print(add_commas(number))
          
          
          
          2. 和浮点数搭配使用,只分隔小数位前的数位
          
          def add_commas(number):
              return f"{number:,f}"  # 78,934,654.383000
          
          
          number = 78934654.383
          
          # 调用函数
          print(add_commas(number))
      • 分隔符2: _
4.字符串的操作方法
    • rstrip([character])
      • 默认将字符串的空白字符去除
    • lstrip([character])
      • 默认将字符串左边的空白字符去除
    • strip([character])
      • 默认将字符串两端的空白字符(包括空格,\n,\t等)去除

      • 参数character代表删除指定的字符
        • 场景1: 指定删除给定的字符
          
          str = "[hello,world]"
          
          print(str.strip('[]'))  # hello,world
    • replace(old,new[,count]), 生成新的字符串
      • 指定替换原有的字符或者子串的次数,会生成新的字符串
    • 场景1: 未指定count默认替换全部符合条件的
      
      (1)替换str1中的字符串hello为hdm
      str1 = "hello,world! hello,python hello guys"
      
      res = str1.replace("hello", "hdm")
      
      print(res)  # hdm,world! hdm,python hdm guys
      
      
      
      场景2: 指定count,仅替换前count个
      
      str1 = "hello,world! hello,python hello guys"
      
      res = str1.replace("hello", "hdm", 2)
      
      print(res)  # hdm,world! hdm,python hello guys
      
      
      
      特殊场景1: 替换值不存在,原字符串输出
      
      str1 = "hello,world!"
      
      res = str2.replace("Python","hh")
      
      print(res)  # hello,world!
      
      
      特殊场景2: 大小写敏感
      
      str1 = "hello,world!"
      
      res = str1.replace("Hello","hh")
      
      print(res)  # hello,world!
      
      
      特殊场景3: count超过可替换的字符串,不报错
      
      str1 = "hello,world!"
      
      res = str1.replace("hello", "hh", 2)
      
      print(res)  # hh,world!
      
      
    • split([sep[,maxsplit]])
      • 作用:从左到右按照指定分隔符划分原字符串,生成一个包含被分割子串列表
      • 参数sep是分隔符,默认是空格
      • 参数maxsplit代表的是拆分次数
        • str = " I like python "
          
          one = str.split(' ') # 空字符串,长度为多个空格字符个数
          
          print(one)  # ['', 'I', 'like', 'python', '']
          
          two = str.split()  # 空格
          
          print(two)  # ['I', 'like', 'python']
          
          
          
          str1 = "dabcdabcd"
          
          lst = str1.split("d")
          
          print(lst)  # ['', 'abc', 'abc', '']
          
          print(len(lst))  # 4
          

      • 参数maxsplit最大分割次数,默认全部分割
      • 场景1: 未指定分隔符和分割次数
        str1 = "I love Python"
        res = str1.split()
        print(res)  # ['I', 'love', 'Python']
        
        实际例子:控制台一次性按照空格分隔输入多个数据,想要针对输入的数据输出的时候也是多个数据
        
            s = input("请输入数字:").split()
            print(s)
        
            控制台输入:
                请输入数字:1 2 3 4 5
            输出:
                ['1', '2', '3', '4', '5']
        
        --------------------------------------------------------
        场景2: 指定最大分割次数
        
        str1 = "I love Python"
        res = str1.split("", 1)
        print(res)  # ['I', 'love Python']
        
        ---------------------------------------------------------
        场景3: 指定分割符,不输出分割符
        
        s1 = "abcde"
        
        print(s1.split('c'))  # ['ab', 'de']
        
        
    • ​​​​​​​translate()和maketrans(intab,outtab)两者需要搭配使用
      • 前者是参数table给出的表(包含 256 个字符)转换字符串的字符
        • 调用方式:字符串.translate(翻译table[,过滤字符])
      • 后者是创建字符映射的转换表
        • 调用方式: str.maketrans(intab,outtab)
    • upper()
      • 将字符串全部转换为大写
      • str1 = "hello python"
        
        str2 = str1.upper()
        
        print(str2)  # HELLO PYTHON
    • lower()
      • 将字符串全部转换为小写
        • str1 = "HELLO PYTHON"
          
          str2 = str1.lower()
          
          print(str2)  # hello python
    • join(iterable)
      • 根据指定分隔符将序列所有元素是字符串的合并,返回一个新的字符串
      • str1 = 'hello'
        
        str2 = ','.join(str1)
        
        print(str2) # h,e,l,l,o
    • title()
      • 将字符串中的每个单词的首字母转换为大写字母,其余字母转为小写

        • str1 = "hello world"
          print(str1.title())  # Hello World
    • capitalize()
      • 将字符串的第一个字符转换为大写字母,其余字母转为小写
    • ​​​​​​​ord(),chr()
      • ord()是将将字符转换为整数值(ASCII)
      • chr()是将1个范围在range(256)的整数转换为字符值
题目1: 替换单词字母(输入单词不包括z/Z)

def shift_char(word): 
    str = ""
    for i in word:
        将当前字母替换为下一个字母
        j = i.replace(i,chr(ord(i)+1))
        str += j
    return str

# 获取单词
word = “moon”
# 调用函数 
print(shift_char(word))


题目2: 加密a-z变为d-c
    def encode(string):
        new_str = ""
        for char in string:
            if char.isalpha():
                if char != 'z':
                    new_str += chr(ord(char) + 3)
                else:
                    new_str += "c"
            else:
                new_str += char

        return new_str

    str = "hello,world!"
    print(f"{str}的加密是{encode(str)}")  # hello,world!的加密是khoor,zruog!
  • swapcase()​​
    • 对字符串的字母进行大小写交换​​​​​​​​​​​​​​​​​​​,生成新的字符串
    • def swap_case(s):
      
          s = s.swapcase()
      
          return s
      
      if __name__ == '__main__':
      
          s = input() # I love Python
      
          result = swap_case(s)
      
          print(result) # i LOVE pYTHON
    • 扩展: 不使用swap​​case()进行大小写转换
      • str1 = "HelloPython"
        new_str = ""
        for i in str1:
            if i.islower():
                new_str += i.upper()
            else:
                new_str += i.lower()
        print(new_str)
        ​​​​​​​​​​​​     ​​​​
    • isalpha()
      • 判断字符串中所有字符是否都是字母,返回bool值​​​​​​​​​​​​​​
      • str1 = "HelloWorld"
        
        print(str1.isalpha())  # True
        
        str2 = "Hello World"
        
        print(str2.isalpha())  # False
    • isdigit()
      • 判断字符串中所有字符是否都是数字,返回bool值​​​​​​​
      • 题目一: 判断连续三位是数字/字母(不区分大小写)
        def identi(str):
            if len(str) <3:
                return None
            else:
                for i in range(len(str)-2):
                    if str[i:i+3].isdigit():
                        return f"{str}包含了连续3位数字"
                    elif str[i:i+3].isalpha():
                        return f"{str}包含了连续3位字母"
                print(f"{str}密码安全")
        
        
        print(identi("a1A3zbc"))

    • ​​​​​​​isalnum()
      • ​​​​​​​判断字符串是否仅有字母+数字
    • endswith(string,start_index,end_index)
      • ​​​​​​​判断指定字符串是是否以某个字符串结尾
      • 无起始索引则默认从指定字符串的开头和结束
        def ends_with(string1, string2):
           
            if string1.endswith(string2):
                return True
            else:
                return False
        # 获取输入字符串
        string1 = "dragon"
        string2 = "on"
        # 调用函数
        print(ends_with(string1, string2))  # True
    • istitle()   
      • 检查字符串是否符合标题文本的格式即每个单词的首字母都大写     

  • def is_title(sentence):
        if sentence.istitle():
            return True
        else:
            return False
            
    
    # 从用户处获取输入
    input_sentence = “The Quick Brown Fox”
    # 调用函数
    print(is_title(input_sentence))
    • isupper(),islower()
      • 检查字符是否是大写字母/小写字母  

      • str = "Hello,World"
        count = 0
        for i in str:
            if i.isupper():
                count += 1
        print(f"大写字母的数量是:{count}")
    • index(substring[,start,end])
      • 可以和有序序列使用,不可在条件语句中使用
      • 查询子串所在的起始索引,如不存在,则抛valueError
      • str = "Hello"
        print(str.index("wor"))  # ValueError: substring not found

    • find(substring[,start,end])      
      •  只可与字符串使用;可在条件语句(if...else)中使用
      • 查询子串(区分大小写)所在的起始索引,如不存在,则返回-1
  • 场景1:  查询子串出现在字符串的次数
    
    def sub_string(string, substring):
        count = 0
        while True:
            index = string.find(substring)
            if index != -1:
                count += 1
            else:
                break
            string  = string[index+len(substring):]
        return count
    
    
    
    string = input()
    substring = input()
    print(sub_string(string, substring))
    
                      
  •             

5. 其他
  • 函数input() 
    • 控制台输入数据,返回的是string类型​​​​​​​​​​​​​​
例1: 输入无提示

        s1 = input()

例2: 输入有提示

        s1 = input("请输入内容:")
  • 函数eval()
    • 将字符串当成表达式去处理,返回计算结果(只可处理表达式
    • 常用于:将字符串转换为数据本身,常和input()搭配
      • a = input("请输入列表:")  # [1,2,3,4,5]
        
        print(type(a))  # <class 'str'>
        
        print(type(eval(a)))  <class 'list'>
    • 错误使用场景:
      • 场景1:
        str = eval(input())
        print(str) 
        
        输入字符串
            Hello, my name is john
                      ^
        SyntaxError: invalid syntax
        
        
        原因:本身字符串里面无表达式且非其他数据类型
        
        
        场景2:
        
        a = 10
        b = 10
        print(eval("a += b"))  # SyntaxError: invalid syntax
        
        原因:eval仅可处理表达式,上述场景里面是赋值语句

                        

6.应用题
题目一: 查看密码安全等级
# 分数与密码安全等级的字典并输出
# 题目:密码长度10位以及以上,可以为数字,大小写字母,标点符号,有其中一项则加1分
# 安全等级:弱,较弱,中,较强,强
import string

n_dict = {1: "弱", 2: "较弱", 3: "中", 4: "较强", 5: "强"}


def passwd(n_str):
    score = 0
    num = []
    upper_lett = []
    lower_lett = []
    ch = []
    sum = [num,upper_lett,lower_lett,ch]
    if len(n_str) >= 10:
        score += 1
    for char in n_str:
        if char.isdigit():
            num.append(char)
        elif char.isalpha():
            if char.islower():
                lower_lett.append(char)
            else:
                upper_lett.append(char)
        elif char in "+-*/_&%^@":
                ch.append(char)
        else:
            continue
    for i in sum:
        if len(i) != 0:
            score += 1
    if score not in n_dict:
        return "未知"
    else:
        return f"密码的分数是{score},对应的密码安全等级是{n_dict[score]}"


print(passwd("900507Ha"))  # 中


题目二: 批量替换字符
题目:替换str1的字符i,l,p为char1的value:I,L,P

str1 = "i love python"
char1 = {"i":"I","l":"L","p":"P"}



方法一: 使用replace直接替换str1:

for key, value in char1.items():
    str1 = str1.replace(key,value)
print(str1)


方法二: 暴力for循环,拼接新字符串

str2 = ""
for i in str1:
    if i in char1:
        str2 += char1[i]
    else:
        str2 += I

方法三:translate()和maketrans()

str1 = str1.translate(str.maketrans(char1))
print(str1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值