str and system

今日总结

一、str

1. 什么是字符串

字符是容器型数据类型;将’’、""、""""""、’’’’’’ 作为容器的标志,里面的每个符号都是字符串的元素

不可变;有序

元素:字符串的元素就是引导中的每个基本符号。元素又叫字符,字符又分普通字符和转义字符两种。

注意:""""""、’’’’’’ 作为标志才能换行

str1 = 'jl;,海事局s8*KM2323'
str2 = "jh函数23#hjj"
str3 = """ads123
sadfancs
你好
"""
str4 = '''
adafvff
还哈哈
'''
print(type(str3), type(str4))       # <class 'str'> <class 'str'>

2. 转义字符

转义字符就是在特定的字符前加\,让符号具备特殊功能或者意义

\n - 换行

\t - 水平制表符,相当于tab键

\’ - 表示一个单引号

\" - 表示一个双引号

\ \ - 表示一个反斜杠

注意:转义字符的长度是1

print('hj8;\n123')
poem = '\t床前明月光,\n\t疑似地上光。\n\t举头望明月,\n\t低头思故乡。'
print(poem)

# message = 'it's me !'     # 报错!
# 方案一
message1 = "it's me !"
# 方案二
message1 = 'it\'s me!'       # it's me!
print(message1)

# message2 = "I say:"how are you?""     # 报错!
# 方案一
message2 = 'I say:"how are you?'
# 方案二
message2 = "I say:\"how are you?\""     # I say:"how are you?"
print(message2)

message3 = 'abc\\n123'
print(message3)     # abc\n123

file = 'C:\\name\study\\a.txt'
print(file)

3. 转义字符 - 编码字符

\u四位的十六进制数 - 表示四位的十六进制数编码值对应的字符

message = 'abc\u4f78==='
print(message)      # abc佸===dict(数据)将数据转换成字典

4. 字符编码

  1. 字符编码

计算机在存储数据的时候只能存数字(存数字的二进制补码),文本符号是不能直接报错在内存中,
为了能让计算机储存文本符号,就给每个符号对应一个固定的数字,在保存符号的时候就去保存这
个符号对应的数字。每个符号对应的数字就是这个符号的编码值。

  1. 编码表

记录每个符号对应的编码值的表

a. ASCII码表:

​ 数字字符在字母的前面,编码值从字符0到字符9依次增加

​ 所有大写字符在所有的小写字母前面;(大写字母从65开始,小写字母从97开始)

​ 大写字符和小写字母之前游间隙

b. Unicode编码表:

​ Unicode是ASCII码表的扩展,包含了ASCII所有的符号

​ 包含了所有国家所有民族的所有语言的符号(万国码)

​ 中文范围:4e00 ~ 9fa5

1) 编码字符:\u4位的16进制编码值
print('a\u0061')        # a a
c = '陶'
print('\u4e00' <= c <= '\u9fa5')        # True
2) 编码相关的函数

a. chr(编码值) - 获取指定编码对应的字符

print(chr(97))          # a
print(chr(0x4e00))      # 一
print(chr(0x4e01))      # 丁
for x in range(0x4e00, 0x9fa5+1):
    print(chr(x), end=' ')
    if x % 30 == 0:
        print()

b. ord(字符) - 获取字符编码值(字符用长度是1的字符串表示)

print(hex(ord('陶')))        # 0x9676
print(hex(ord('皞')))        # 0x769e

#写一个程序将输入的小写字母字符转换成对应的大写字母
p = 'z'
code = ord(p) - 32
print(chr(code))        # Z

二、相关操作

1. 查

获取字符
字符串获取字符的方法和列表获取元素的方法一样

str1 = 'python'
print(str1[1])      # 'y'
print(str1[-1])     # 'n'
# print(str1[9])    # 报错!IndexError: string index out of range

str2 = 'abc\n123'
print(str2[4])      # '1'

print(str1[2:])     # 'thon'
print(str1[1:-1:2]) # 'yh'
print(str1[::-1])   # 'nohtyp

for x in str1:
    print('x', x)

for index in range(len(str1)):
    print(index, str1[index])

2.相关操作

1) +、*
str2 = 'abc'
str3 = 'xyz'
str4 = str3 + str2
print(str4)     # 'xyzabc'

str5 = str2 + '=' + str3
print(str5)     # 'abc=xyz'

print(str2*3)   # 'abcabcabc'

2) ==、!=
print('abc' == 'abc')       # True
print('abc' == 'bac')       # False
3)>、<、>=、<=

两个字符串比较大小比较的是第一对不相等的字符的编码值的大小

判断字符是否是小写字母:'a' <= char <= 'z'
判断字符是否是大写字母:'A' <= char <= 'Z'
判断字符是否是字母:'a' <= char <= 'z' or 'A' <= char <= 'Z'
判断字符是否是数字:'0' <= char <= '9'
判断是否是中文字符:'\u4e00' <= char <= '\u9fa5'
str6 = 'abc'
str7 = 'XYZMN'
print(str6 > str7)      # True

# 练习:统计字符串中数字字符的个数
str0 = 'jsj28海事局389sjj--3sskk9jj'
count = 0
for x in str0:
    if '0' <= x <= '9':
        count += 1
print(count)

# 练习:提取字符中所有的中文字符
# 'aj好23l-数据--2啊'  -> '好数据啊'
s5 = 'aj好23l-数据--2啊'
newS5 = ''
for x in s5:
    if '\u4e00' <= x <= '\u9fa5':
        # print(x, end='')
        newS5 += x
print(newS5)        # 好数据啊
4) in 和 not in

字符 in 字符串 - 判断字符串中是否存在指定的字符

字符串1 in 字符串2 - 判断字符2中是否存在字符串1(判断字符串1是否是字符串2的子串)

print('a' in 'abc')     # True
print('ab' in 'abc')    # True
print('ac' in 'abc')    # False     必须是连续的才是子串
5) max、min、sorted、str、len
  • max、min、sorted
  • str

str(数据) - 将指定数据转换成字符串(所有类型的数据都可以转换成字符串;转换的时候直接在数据的打印值外加引号)

str(100)        # '100'
str([100, 200]) # '[100, 200]'
str({'a': 10, 'b': 20})   # "{'a': 10, 'b': 20}"
  • len
print(len('\tabc\n123'))        # 8
print(len('\\tabc\n123'))       # 9

3.r语法

字符串的最前面可以加r/R,能够让字符串中所有的转义字符功能消失。让字符串中每个字符转成普通字符

str1 = r'\tabc\n12\\3\''
print(str1)     # '\tabc\n12\\3\''

三、内建函数

1. 字符串1.count(字符串2)

返回字符串1中字符串2出现的次数

str1 = 'how are you?i am fine, thank yuo!'
print(str1.count('h'))
print(str1.count(' '))
print(str1.count('you'))

2. 字符串.join(序列)

将序列中的元素用指定的字符串拼接产生一个新的字符串。(序列中的元素必须是字符串)

result = '+'.join('abc')
print(result)       # 'a+b+c'

result = 'And'.join('hello')
print(result)       # 'hAndeAndlAndlAndo'

result = '+'.join(['name', 'age', 'gender'])
print(result)       # 'name+age+gender'

result = ''.join(['name', 'age', 'gender'])
print(result)       # 'nameagegender'

result = '*'.join({'a': 10, 'b': 20, 'c': 30})
print(result)       # a*b*c

# 练习:
# nums = [10, 20, 30, 25, 6]   -> '102030256'
nums = [10, 20, 30, 25, 6]
# 方法一
newNum = ''
for x in nums:
        newNum += str(x)
print(newNum)       # 102030256

# 方法二
newNum = ''.join([str(x)for x in nums])
print(newNum)       # 102030256

3. 字符串1.split(字符串2)

将字符串1中所有字符串2作为切割点对字符串1进行切割,返回的是列表

字符串1.split(字符串2, N)

将字符串1中前N个字符串2作为切割点对字符串1进行切割,返回的是列表

str1 = 'abc+123+xyz+mn'
result = str1.split('+')
print(result)       # ['abc', '123', 'xyz', 'mn']

str2 = 'sdsiwd234第三方234大怒439'
result = str2.split('234')
print(result)       # ['sdsiwd', '第三方', '大怒439']

# 如果切割点在边界或连续重复,切割完成后会产生空串
str3 = '+abc+123++xyz+mn+'
result = str3.split('+')
print(result)       # ['', 'abc', '123', '', 'xyz', 'mn', '']


str1 = 'abc+123+xyz+mn'
result = str1.split('+', 1)
print(result)       # ['abc', '123+xyz+mn']

4. 字符串1.replace(字符串2,字符串3)

将字符串1所有的字符串2全部替换成字符串3

str1 = 'abc+123+xyz+mn'
result = str1.replace('+', '-')
print(result)       # 'abc-123-xyz-mn'

字符串1.replace(字符串2,字符串3,N)

将字符串1前N个字符串2全部替换成字符串3

str1 = 'abc+123+xyz+mn'
result = str1.replace('+', '-', 2)
print(result)       # 'abc-123-xyz+mn'

5. 字符串.upper()

将字符串中所有的小写字母转成大写

str3 = 'a2h2klm12+'
print(str3.upper())		# 'A2H2KLM12+'

6. 字符串.zfill(N)

将原字符串转换成长度是N的新字符串,不够在原字符串前加’0’

print('abc'.zfill(5))       # 00abc

四、进制system

计算机对数字的使用主要有四种进制:二进制、八进制、十进制、和十六进制

1. 十进制

基数:0 ~ 9
进位:逢101
位权:10的次方数(0开始)  123 -> 3*10**0 + 2*10**1 + 3*10**2
python表示:直接写

2. 二进制

基数:0 ~ 1
进位:逢21
位权:2的次方数(0开始)      100 -> 0*2**0 + 0*2**1 + 1*2**2 == 4
                           1011 -> 2**0 + 2**1 + 2**3 == 11
python表示:加前缀 0b / 0B  

print(0b1011)       # 11

3. 八进制

基数:0 ~ 7
进位:逢81
位权:8的次方数(0开始)      23 -> 3**8**0 + 2**8**1 == 19
python表示:加前缀 0o / 0O

print(0o23)     # 19

4. 16进制

基数:0 ~ 9, a ~ f(A~F)
进位:逢161
位权:16的次方数(0开始)      af -> 15*16**0 + 10*16**1 == 175
python表示:加前缀 0x / 0X

hex(数字)     - python中查看数字中对应的16进制编码值

print(0xaf)     # 175

# 如果需要转换进制,可使用数字除进制,直到除尽

作业

  1. 输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
    例如: 输入**'abcd1234 ’ ** 输出**‘bd24’**

    str1 = 'abcd1234'
    print(str1[1::2]) 
    
  2. 输入用户名,判断用户名是否合法(用户名长度6~10位)

    legalName = input('请输入用户名:')
    if 6 <= len(legalName) <= 10:
        print('合法')
    else:
        print('不合法')
    
  3. 输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
    例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法

    legalName = input('请输入用户名:')
    for x in legalName:
        if not ('a' <=x<= 'z' or 'A' <=x<= 'Z' or '0' <=x<= '9'):
            print('不合法')
            break
    else:
        print('合法')
    
  4. 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
    例如: ‘abc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法

    legalName = input('请输入用户名:')
    if 'A' <= legalName[0] <= 'Z':
        count = 0
        for x in legalName[1:]:
            if 'a' <= x <= 'z' or 'A' <= x <= 'Z':
                if '0' <= x <= '9':
                    count += 1
            else:
                print('不合法')
                break
        else:
            if count == 0:
                print('不合法')
            else:
                print('合法')
    else:
        print('不合法')
    
  5. 输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
    例如:输入**‘abc1shj23kls99+2kkk’** 输出:'123992’

    # 方法一
    str1 = input('请输入字符串:')
    str2 = ''
    for x in str1:
        if '0' <= x <= '9':
            str2 += x
    print(str2)
    
    # 方法二
    str1 = input('请输入字符串:')
    str2 = ''.join([x for x in str1 if '0' <= x <= '9'])
    print(str2)
    
  6. 输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)

    例如: 输入**‘a2h2klm12+’ ** 输出 'A2H2KLM12+'

    # upper方法:
    str3 = input('请输入字符串:')
    print(str3.upper())
    
    # 算法方法一:
    str3 = input('请输入字符串:')
    str4 = [chr(ord(x) - 32) if 'a' <= x <= 'z' else x for x in str3]
    print(''.join(str4))
    
    # 算法方法二:
    str3 = input('请输入字符串:')
    str4 = ''
    for x in str3:
        if 'a' <= x <= 'z':
            str4 += chr(ord(x) - 32)
        else:
            str4 += x
    print(str4)
    
  7. 输入一个小于1000的数字,产生对应的学号
    例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**

    # 3 -> 003
    # 23 -> 023
    # 345 -> 345
    # 方法一
    num = input('请输入数字(0~999):')
    newNum = 'py1901' + '0'*(3-len(num)) + num
    print(newNum)
    
    # 方法二
    # 字符串.zfill(N)      -   将原字符串转换成长度是N的新字符串,不够在原字符串前加'0'
    # print('abc'.zfill(5))       # 00abc
    newNum = 'py1901' + 'num'.zfill(3)
    print(newNum)
    
  8. 输入一个字符串,统计字符串中非数字字母的字符的个数
    例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**’===’** 输出:3

    str1 = input('请输入字符串:')
    count = 0
    for x in str1:
        if not ('a'<= x <= 'z' or 'A' <= x <= 'Z' or '0' <= x <= '9'):
            count += 1
    print(count)
    
  9. 输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串 例如: 输入字符串**‘abc123’, 输出’+bc12+’**

    str1 = input('请输入字符串:')
    str2 = '+' + str1[1:-1] + '+'
    print(str2)
    
  10. 输入字符串,获取字符串的中间字符
    例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**

str1 = input('请输入字符串:')
l = len(str1)
if len(str1) % 2:
    print(str1[l//2])
else:
    print(str1[(l//2-1):(l//2+1)])
  1. 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)
    例如: 字符串1为:how are you? I’m fine, Thank you! , 字符串2为:you, 打印8
# 方法一
str1 = 'how are you? Im fine, Thank you!'
str2 = 'you'
print(str1.find(str2))

# 方法二
str1 = 'how are you? Im fine, Thank you!'
str2 = 'you'
len1 =len(str2)
for index in range(len(str1) - len1 +1):
    if str1[index:index + len1] == str2:
        print(index)
        break
else:
    print('没有该子串:', -1)

  1. 获取两个字符串中公共的字符
    例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
str1 = 'abc123'
str2 = 'huak3'

# 方法一:
str3 = ''.join(set(str1) & set(str2))
print(str3)

# 方法二
str3 = ''
for x in str1:
    if x in str2 and x not in str3:
        str3 += x 
print(str3)   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值