目录
01、字符串
- 字符串属于不可变序列类型,使用单引号、双引号、三单引号或三双引号作为界定符(单引号和双引号在python不做区分),不同界定符之间可以互相嵌套
- 支持序列通用方法,包括比较、计算长度、元素访问、切片等
- 支持一些特有的操作方法,包括格式化操作、字符串查找、字符串替换等
- 不支持元素增加、修改与删除等操作
- Python 3.x中字符串类型为str类型
- Python 3.x中,程序源文件默认为UTF-8编码
【字符串格式化】
形式:
- ' %[-][+][0][m][.n]格式字符% ' 表达式
print('%10d'%3) # 3
print('%.4f'%3.14159)# 3.1416
print("%c"%65) # A (打印字符)
print("%s"%65) # 65(打印字符串)
print('%s'%[1,2,3]) # [1, 2, 3]
print(str([1,2,3])) # [1, 2, 3]
print('%d'%'123') # TypeError: %d format: a number is required, not str
- 使用format( )方法进行格式化
print('The number {0:,} in hex is:{0:#x}, the number {1} in oct is {1:#o}'.format(123456,789)) # ,是千分号 #x是十六进制 #o是八进制
# The number 123,456 in hex is:0x1e240, the number 789 in oct is 0o1425
print('The number {1:,}in hex is:{1:#x}, the number {0} in oct is {0:#o}'.format(123456,789))
# The number 789in hex is:0x315, the number 123456 in oct is 0o361100
# > 向右对齐
print('my name is {name:>20},my age is {age} . '.format(name='yjg' ,age=22))
# my name is yjg,my age is 22 .
【字符串常用方法】
1.去掉空格和特殊符号
- uname.strip() 去掉空格和换行符
- uname.strip('xx') 去掉某个字符串(只能去掉一个)
- uname.Istrip() 去掉左边的空格和换行符
- uname.rstrip() 去掉右边的空格和换行符
print(' abc '.strip()) # abc
print(' abc '.rstrip()) # abc
print(' abc '.lstrip()) # abc
print('\nhello \nworld \n'.strip()) # hello
# world
print('abcdabcaba'.strip('a')) # bcdabcab 只去掉了第一个a
2.字符串的搜索和替换
- name.count('x') 查找某个字符在字符串里面出现的次数
- name. capitalize() 首字母大写
- name.center(n,'-') 把字符串放中间,两边用-补齐
- name.find('x') 检测字符串中是否包含子子符串str ,如果指定beg(开始)和end(结束)范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。
- name.index('x') 找到这个字符返回下标,多个时返回第一个;不存在的字符报错
- name.replace(oldstr,newstr) 字符串替换
- name.format ( ) 字符串格式化
- name.format_map(d) 字符串格式化,传进去的是一个字典
s = "kiwifruit,lemon,lichee,orange,peach, banana,plum, carrot,maize"
print(s.find('peach')) # 30
print(s.find('peach',7)) # 30 从7开始找
print(s.find('peach',7,20))# -1 在[7,20)上找
print(s.rfind('p')) # 43 找最右边的p
print(s.index('p')) # 30 第一个p的序号
print(s.index('pea')) # 30
print(s.rindex('pea')) # 30 找最右边的pea
print(s.count('p')) # 2
print(s.count('pp')) # 0
3.字符串的测试和替换函数
- S.startswith(prefix[,start[,end]]) 是否以prefix开头
- S.endswith(suffix[,start[,end]) 以suffix结尾
- S.isalnum() 是否全是字母和数字,并至少有一个字符
- S.isalpha() 是否全是字母,并至少有一个字符
- S.isdigit() 是否全是数字,并至少有一个字符
- S.isspace() 是否全是空白字符,并至少有一个字符
- S.islower() S中的字母是否全是小写
- S.isupper() S中的字母是否全是大写
- S.istitle() S是否是首字母大写
print('Beautiful '.startswith('Be')) # True
print('Beautiful'.startswith('Be',5)) # False
print('Beautiful'.startswith('Be',0,5)) # True
print('Beautiful'.endswith('ful')) # True
print( 'What is Your Name?'.lower()) # what is your nam? 小写
print( 'What is Your Name?'. upper()) # WHAT IS YOUR NAME? 大写
print( 'what is your name?'.capitalize()) # What is your name? 句的首字母大写
print( 'what is your name?'.title( )) # What Is Your Name? 每个首字母大写
print( 'What is Your Name?'.swapcase()) # wHAT IS yOUR nAME? 交换大小写
4.字符串的分割
split()通过指定分隔符对字符串进行切片,如果参数num有指定值,则分隔num+1个子字符串
split()返回一个列表
- name.split() 默认是按照空格分割
- name.split(',') 按照逗号分割
s = "kiwifruit,lemon,lichee,orange,peach, banana,plum, carrot,maize"
print(s.split(',')) # 返回的是一个列表
# ['kiwifruit', 'lemon', 'lichee', 'orange', 'peach', ' banana', 'plum', ' carrot', 'maize']
s= '2022-12-26'
print(list( map( int,s.split('-')))) # [2022, 12, 26]
s='hello world My name is abc'
print(s.split( )) # ['hello', 'world', 'My', 'name', 'is', 'abc']
print(s.split(None,4)) # 只切4次 ['hello', 'world', 'My', 'name', 'is abc']
5.连接字符串
- ',' join(s) 用逗号连接s变成一个字符串,s可以是字符,列表,字典(可迭代的对象)。int类型不能被连接。
li=[ "kiwifruit", 'lemon', 'lichee', 'orange', 'peach']
# join将元素通过,连接在一起
print(',' .join(li)) # kiwifruit,lemon,lichee,orange,peach
6.截取字符串(切片)
str = '0123456789'
print(str[0:3]) #截取第一位到第三位的字符 012
print(str[6:]) #截取第七个字符到结尾 6789
print(str[2]) #截取第三个字符 2
print(str[ ::-1]) #创造一个与原字符串顺序相反的字符串 # 9876543210
print(str[-3:-1]) #截取倒数第三位与倒数第一位之前的字符 # 78
print(str[-3: ]) #截取倒数第三位到结尾 # 789
7.求值
eval函数可以将字符串转成表达式执行,例如print(eval(input('请输入')))
print(eval('3+4')) # 7
a,b=3,5
print(eval('a+b')) # 8
print(eval('math.sqrt(3)')) # 1.7320508075688772
print(eval('b')) # 5
8.关键字in
print('a' in 'abcde') # True
print('ab' in 'abcde') # True
print('j' in 'abcde') # False
【字符串常量】
- string.digits 所有数字
- string.ascii_letters 所有字母
- string.ascii_lowercase 所有小写字母
- string.ascii_uppercase 所有大写字母
import string
print( string.digits)
# 0123456789
print( string.ascii_letters)
# abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
print( string.ascii_lowercase)
# abcdefghijklmnopqrstuvwxyz
print( string.ascii_uppercase)
# ABCDEFGHIJKLMNOPQRSTUVWXYZ
02、异常处理(简单看看,不看也没问题)
- 在编写程序的过程中,程序员通常希望识别正常执行的代码和执行异常的代码。
- 这种异常可能是程序的错误,也可以是不希望发生的事情。
- 为了能够处理这些异常,可以在所有可能发生这种情况的地方使用条件语句进行判断。但这么做既效率低,也不灵活,而且还无法保证条件语句覆盖了所有可能的异常。
- 为了更好地解决这个问题,Python语言提供了非常强大的异常处理机制。通过这种异常处理机制,可以直接处理所有发生的异常,也可以选择忽略这些异常。
开发人员在编写程序时,难免会遇到错误,有的是编写人员疏忽造成的语法错误,有的是程序内部隐含逻辑问题造成的数据错误,还有的是程序运行时与系统的规则冲突造成的系统错误,等等。总的来说,编写程序时遇到的错误可大致分为2类:
- 语法错误: print "Hello,World!” Python 3不再支持这种写法
- 运行错误: a= 1/0
在 Python 中,这种运行时产生错误的情况叫做异常(Exceptions)
异常名称 | 描述 |
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
Stoplteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
IndexError | 序列中没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python解释器不是致命的) |
NameError | 未声明/初始化对象(没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotlmplementedError | 尚未实现的方法 |
SyntaxError Python | 语法错误 |
lndentationError | 缩进错误 |
zeroDivisionError | 除(或取模)零(所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
lmportError | 导入模块/对象失败 |
LookupError | 无效数据查询的基类 |
- 当一个程序发生异常时,代表该程序在执行时出现了非正常的情况,无法再执行下去。默认情况下,程序是要终止的。如果要避免程序退出,可以使用捕获异常的方式获取这个异常的名称,再通过其他的逻辑代码让程序继续运行,这种根据异常做出的逻辑处理叫作异常处理。
- 开发者可以使用异常处理全面地控制自己的程序。异常处理不仅仅能够管理正常的流程运行,还能够在程序出错时对程序进行必要的处理。大大提高了程序的健壮性和人机交互的友好性。
- 那么,应该如何捕获和处理异常呢?可以使用try语句来实现。
【案例精选】
【例题1】最大公约数
import math
while True:
try:
x,y=map(int, input('请输入两个整数: ').split( ))
print('%d与%d的最大公约数为:%d'%(x, y,math.gcd(x,y)))
break
except ValueError:
print('你输入的不是合法的数据,请重新输入...' )
【例题2】除法
x=3.5
try:
y=float( input(‘请输入除数:'))z=x/y
except ZeroDivisionError:
print('除数不能为0')
except ValueError:
print('除数应为数值类型′)
else:
print(x,'/',y,'=',z)
【例题3】除法
x=3.5
try:
y=float( input('请输入除数:'))
z=x/y
except BaseException as e:
print('你输入的不是合法的数据' ,e)
else:
print(x,'/ ',y,'=',z)
# 请输入除数:8
# 3.5/8.0=0.4375
# ==================
# 请输入除数: gh
# 你输入的不是合法的数据could not convertstring to float: 'gh'