• Python_字符串的映射与可变字符串的应用


     1 '''
     2 maketrans()、translate()
     3 maketrans()方法用来生成字符映射表,而translate()方法则按映射表中定义的对应关系转换并替换其中的字符,使用这两个方法的组合可以
     4 同时处理多个不同的字符,replace()方法则无法满足这一要求。
     5 '''
     6 #创建映射表,将字符'abcdef123'一一地转换为'uvwxyz@#$'
     7 table=''.maketrans('abcdef123','uvwxyz@#$')
     8 s2 = 'Python is a greate programming language.I like it 123!'
     9 print(s2.translate(table))
    10 # Python is u gryuty progrumming lunguugy.I liky it @#$!
    11 
    12 #模拟凯撒加密
    13 #每个英文字母替换为字母表中后面第3个字母,当然,也可以是其他数字
    14 import string
    15 lowerLetters=string.ascii_lowercase
    16 upLetters=string.ascii_uppercase
    17 before=lowerLetters+upLetters
    18 print(before)
    19 # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    20 #循环移位
    21 after=lowerLetters[3:]+lowerLetters[:3] + upLetters[3:]+upLetters[:3]
    22 print(after)
    23 # defghijklmnopqrstuvwxyzabcDEFGHIJKLMNOPQRSTUVWXYZABC
    24 #创建字符转换表,将英文字母替换为该字母后面第3个字母
    25 table1=''.maketrans(before,after)
    26 example='If the implementation is easy to explain,it may be a good idea.'
    27 print(example.translate(table1))
    28 # Li wkh lpsohphqwdwlrq lv hdvb wr hasodlq,lw pdb eh d jrrg lghd.
    29 
    30 #Python标准库中的string提供了英文字母大小写、数字字符、标点符号等常量,可以直接使用,下面的代码实现随机密码生成功能
    31 import string
    32 x=string.digits+string.ascii_letters+string.punctuation #可能字符集
    33 print(x)
    34 # 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
    35 print(string.digits)
    36 # 0123456789
    37 print(string.ascii_letters)
    38 # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    39 print(string.punctuation)
    40 # !"#$%&'()*+,-./:;<=>?@[]^_`{|}~
    41 import random
    42 print(''.join([random.choice(x) for i in range(8)]))    #随机选取8个字符
    43 
    44 '''
    45 在Python中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能重新创建一个新的字符串对象。
    46 然而,如果确实需要一个支持原地修改的unicode数据对象,可以使用io.StringIO对象或array模块.
    47 '''
    48 from io import StringIO
    49 s3='Hello world'
    50 sio=StringIO(s3)    #创建可变字符串对象
    51 print(sio)
    52 # <_io.StringIO object at 0x101ba5d38>
    53 print(sio.tell())  #返回当前位置
    54 # 0
    55 print(sio.read()) #从当前位置开始读取字符串
    56 # Hello world
    57 print(sio.getvalue())   #返回可变字符串的全部内容
    58 # Hello world
    59 print(sio.tell())
    60 # 11
    61 sio.seek(6) #重新定位当前位置
    62 sio.write('SDIBT')  #从当前位置开始写入字符串
    63 print(sio.read())
    64 # ''
    65 print(sio.getvalue())
    66 # Hello SDIBT
    67 print(sio.tell())
    68 # 11
    69 s3='Hello world'
    70 from array import array
    71 sa=array('u',s3)
    72 print(sa)
    73 # array('u', 'Hello world')
    74 print(sa.tostring())    #查看可变字符串对象的内容
    75 # b'Hx00x00x00ex00x00x00lx00x00x00lx00x00x00ox00x00x00 x00x00x00wx00x00x00ox00x00x00rx00x00x00lx00x00x00dx00x00x00'
    76 print(sa.tounicode())   #查看可变字符串对象的内容
    77 # Hello world
    78 sa[0] = 'F' #修改指定位置上的字符
    79 print(sa)
    80 # array('u', 'Fello world')
    81 sa.insert(5,'w')   #在指定位置插入字符
    82 print(sa)
    83 # array('u', 'Fellow world')
    84 sa.remove('l')  #删除指定字符的首次出现
    85 print(sa)
    86 # array('u', 'Felow world')
  • 相关阅读:
    [BZOJ] 2276: [Poi2011]Temperature
    [Codevs] 5037 线段树练习4加强版
    [Codevs] 4919 线段树练习4
    [Codevs] 1082 线段树练习3
    [Codevs] 1080 线段树练习
    [Codevs] 1081 线段树练习 2 ----“分块!”
    1629: [Usaco2007 Demo]Cow Acrobats
    Kruskal || BZOJ 1601: [Usaco2008 Oct]灌水 || Luogu P1550 [USACO08OCT]打井Watering Hole
    SET || BZOJ 1588: [HNOI2002]营业额统计 || Luogu P2234 [HNOI2002]营业额统计
    线段树合并+并查集 || BZOJ 2733: [HNOI2012]永无乡 || Luogu P3224 [HNOI2012]永无乡
  • 原文地址:https://www.cnblogs.com/cmnz/p/6957007.html
Copyright © 2020-2023  润新知