Python编程
前言
包括字符串的定义,字符串中的转义符,字符串的拼接,字符串的下标,字符串的切片;列表的概念,新增列表元素,删除列表元素,列表的切片;元组;布尔表达式;in,ont in;and,or,not;深拷贝和浅拷贝;选择分支结构。
一、字符串
1、字符串定义
(1)、用单引号或双引号或三引号引用的对象,就是字符串
url = 'https://www.baidu.com' # 单引号的字符串
url2 = "https://www.baidu.com" # 双引号的字符串
print(url, url2)
(2)、字符串中有单引号时,外面用双引号;字符串中有双引号时,外面用单引号
# str1='It's OK' # invalid syntax
str1 = "It's OK" #字符串中有单引号时,外面用双引号
#str2 = "He said:"Are you OK?"" # invalid syntax
str2 = 'He said:"Are you OK?"' # 字符串中有双引号时,外面用单引号
print(str1,str2)
(3)、三引号可以用三个单引号表示,也可以用三个双引号表示
(4)、字符串中有单引号和双引号时,可以用三引号
str3_new='''这里有'单引号',"双引号"等等'''
print(str3_new)
(5)、三引号可以记录换行符等特殊字符
str6='''横看成岭侧成峰
远近高低各不同
不识庐山真面目
只缘身在此山中'''
str6_new='横看成岭侧成峰\n远近高低各不同\n不识庐山真面目\n只缘身在此山中'
print(str6)
print(str6_new)
2、字符串中的转义符
(1)、一些字母与数字前加“\”来表示常见的那些不能显示的ASCLL字符,如\o,\t,\n等,就称为转义字符
(2)、转义符用于表示不能直接显示的字符,比如后退键,换行符等
str1='abcde\b' #backspace键
print(str1)
str1='abcde\nfghij' #换行
print(str1)
(3)、对转义符的处理:
-
方案一:\n前面加一个\
-
方案二:字符串的外面加一个r,表示后面的字符串中的所有转义符均不生效
-
方案三:表示路径时,可以用/代替\
filepath = 'D:\note1.txt'
print(filepath)
# 方案一,\n前面加一个\
filepath = 'D:\\note1.txt'
# 方案二,字符串的外面加一个r,表示后面的字符串中的所有转义符均不生效
filepath = r'D:\note1.txt'
# 方案三,表示路径时,可以用/代替\
filepath = 'D:/note1.txt'
print(filepath)
3、字符串的拼接
字符串之间用+号进行拼接
print('1'+'2') #字符串之间用+号进行拼接
# print('1'+2) #str型与int型进行相加,报错
print('1'*2) #将1打印两遍
a = 9
b ='6'
# print(a + b) # 报错
print(a + int(b)) # int()将对象转为int型
print(str(a) + b) # str()将对象转为字符串
print(type(a)) # type()返回对象的类型
4、字符串的下标
(1)、字符串的特性,被称为下标或者sequence(序列)
(2)、一个序列,若干个元素组成
(3)、字符串的下标从0开始
(4)、长度为n的字符串,下标最大为n-1
(5)、超出最大下标,则提示下标越界
str9 = 'abcde'
print(str9[5]) # IndexError: string index out of range
(6)、也可以使用负下标,比如最后一位是-1
5、字符串的切片
(1)、[起始值:终止值:步长] 包含起始值,不包含终止值,步长默认值为1
str9 = 'abcde'
print(str9[0:3]) # 正下标的切片
print(str9[-5:-2]) # 负下标的切片
print(str9[:3]) # 起始值不写,表示从头开始取值
print(str9[3:]) # 终止值不写,表示从起始值开始,后面全取
print(str9[:]) # 起始值和终止值都不写,全取
print(str9[::2]) # 步长为n时,表示每n位取一次值
(2)、步长为负数时,从右向左取值
(3)、步长为负数代表着从右向左取值,所以起始值大于终止值才能取到值
(4)、起始值与终止值的正负不影响方向,步长的正负影响方向
str9 = 'abcde'
print(str9[::-1])
print(str9[2::-1]) # 取cba的值
print(str9[-3::-1]) # 取cba的值
注:步长为负数时的起始值应大于终止值;起始值与终止值的正负不影响方向,步长的正负影响方向
(5)、字符串是不可变对象,不可以修改某一位的值
str10 = 'abc'
str10[0] = 'z' # 报错
二、列表与元素
1、列表的概念
(1)、列表也是一种sequence类型,列表是一种容器,由一系列元素组成,元素之间有先后顺序关系
(2)、列表的元素可以存放任意对象
(3)、列表用中括号[]表示
(4)、列表的每个元素之间用逗号分隔
list1 = [1, 'abc', [100, 180, 360], (100, 200, 300), {'A': 'apple'}]
print(list1)
(5)、列表是可变对象,可以修改其中的元素,字符串不可修改
list2 = [100,200,300,[400,500]]
list2[0] = 980
list2[3][0] = 680 # 修改子列表的第0位的值
print(list2)
2、新增列表元素
(1)、append() 将对象添加到列表的末尾
list3 = [100,200,300]
list3.append(600)
print(list3)
(2)、insert() 将对象添加到列表的指定位置
list3.insert(1,600)
print(list3)
注:第一位为下标数,当超过最大下标时,添加到末尾
(3)、extend() 列表的拼接
list3_new = [400,500,600]
list3.extend(list3_new)
print(list3)
# 当拼接字符串类型时会拆开拼接
list3_new = 'abcde'
list3.extend(list3_new)
print(list3)
3、删除列表元素
(1)、pop() 不写参数时,删除列表的最后一位,写参数时,删除指定位置的值
list6 = [100, 200, 300, 400, 500, 600]
list6.pop() # 删除列表的最后一位
# print(list6.pop()) # 返回被删除的值
list6.pop(2) # 删除第2位的值
print(list6)
(2)、remove() 根据值进行删除
list6.remove(100)
print(list6)
注:存在多个相同值时,只删除第一个;根据下标删效率高,根据值删效率低
(3)、del 删除列表中的元素
del list6[0]
# del list6 # 删除整个list6列表
print(list6)
4、列表的切片
(1)、[起始值:终止值:步长] 包含起始值,不包含终止值,步长默认值为1
(2)、步长为负数时,从右向左取值
(3)、切片生成的是新对象,不改变原对象
list9 = [11,22,33,44,55,66,77,88]
list9_new = list9[:3]
list9_new = list9[-1:-4:-1] # 88,77,66
# list9_new = list9[7:4:-1] # 88,77,66
print(list9)
print(list9_new)
5、元组
(1)、元组是不可变对象
tuple1 = (100,200)
tuple1[0] = 900 # 报错,元组是不可变对象
tuple1 = 300 # 不会报错,重新赋值
(2)、元组的元素可以存放任意对象
(3)、元组用()表示
(4)、元组的每个元素之间用逗号分隔
(5)、元组也可以使用下标和切片,用法与列表一致
(6)、如果元组中只有一个元素,加一个逗号
# tuple2 = (100) # 不加逗号为int型,(100)认为是四则远算
tuple2 = (100,)
print(type(tuple2))
(7)、如果元组中有子列表,子列表里的值可以修改
tuple3 = (100, 200, [300, 400, 500]) # 列表可修改,如果修改整个列表是不可修改
tuple3[2][0] = 960
print(tuple3)
三、布尔表达式
1、布尔表达式
(1)、产生布尔值的表达式(expression);布尔值 True,False
(2)、python中,=表示赋值,==表示判断恒等,!=表示不等于
(3)、使用==、!=、>、<、>=、<=比较运算符
print(3 > 2) # True
print(1 > 2) # False
print('a' > 'A') # 字符串之间的比较,比的是ASCII码的大小,A的ASCII码是65,a是97
print('aA' == 'Aa') # 字符串之间的比较,只比较第一位,如果第一位相同,则向后比较第二位,以此类推
2、in;not in
list1 = [100,200,300,[400,500]]
print(100 in list1)
print(500 in list1) # 500属于子列表,不属于列表
print(500 in list1[-1])
print(100 not in list1) # not True为False,not False为True
print(500 not in list1)
3、and ;or;not
操作符 | 描述 | 举例 |
---|---|---|
and 且 | 只有所有表达式都是True,表达式结果才是True,一假为假,全真为真 | >>>True and True(True) |
or 或 | 只要有一个表达式是True,表达式结果就是True,一真为真,全假为假 | >>>True or False(True) |
not 不 | 把操作数反转布尔值。True变成False,False变成True | >>>not True(False) |
print(1 > 2 and 3 > 2 and 10 > 9) # 一假为假,全真为真
print(1 > 2 or 2 > 3 or 10 > 9) # 一真为真,全假为假
(1)、and、or、not 优先级 not > and > or,括号可以改变优先级
print(2 > 1 and 1 > 2 and not True or 3 > 2)
print(2 > 1 and 1 > 2 and (not True or 3 > 2))
(2)、程序执行时,如果它能判断布尔表达式为假,则后面的式子不再执行,直接返回False
def fun1():
print('Hello')
return True
print(1 > 2 and fun1()) # 不会调用fun1()函数
print(fun1() and 1 > 2) # 程序从上到下,从左到右
(3)、程序执行时,如果它能判断布尔表达式为真,则后面的式子不再执行,直接返回True
def fun1():
print('Hello')
return True
print(2 > 1 or fun1()) # 不会调用fun1()函数
print(fun1() or 2 > 1)
4、浅拷贝与深拷贝
有两个接口,A接口的数据[100,200,300,[400,500]],接口B的数据要求与接口A一致
(1)、领导要求修改接口A的第0为的值,改为999,不可以修改接口B的值
(2)、领导要求修改接口A的子列表的第0为的值,改为180,不可以修改接口B的值
赋值:listA与listB指向的是同一个对象
listA = [100,200,300,[400,500]]
listB = listA # 赋值,相当于起了一个别名,没有生成新的对象
listA[0] = 999
print(listA)
print(listB)
浅拷贝:列表是不同的对象,子列表仍然是同一个对象
import copy
listA = [100,200,300,[400,500]]
listB = copy.copy(listA) # 浅拷贝,生成了新对象,子列表仍然是同一个对象
listA[0] = 999
listA[3][0] = 180
print(listA)
print(listB)
深拷贝:列表与子列表都是不同的对象
import copy
listA = [100,200,300,[400,500]]
listB = copy.deepcopy(listA) # 深拷贝,列表和子列表都是新对象
listA[0] = 999
listA[3][0] = 180
print(listA)
print(listB)
切片,相当于浅拷贝
listA = [100,200,300,[400,500]]
listB = listA[:] # 切片,相当于浅拷贝
listA[0] = 999
listA[3][0] = 180
print(listA)
print(listB)
四、分支语句
(1)、python对于缩进有严格的要求,不需要缩进的地方不可以缩进,需要缩进的地方必须缩进
(2)、python对于缩进几个空格不做要求,可以1个,也可以多个,一般默认4个
if 2 > 1: # 如果布尔表达式的结果为真,则执行if下面的语句
print('hello')
else: # 不满足if条件,则执行else中的语句
print('布尔表达式的结果为假')
经典案例: 用户输入一个分数,如果分数大于等于90,则打印优秀,如果大于等于80,则打印不错,如果大于等于60,则打印及格,否则打印不及格
# 方案一
score = input('请输入一个数字: ') # input()从键盘读取用户的输入,返回值是str型
if score.isdigit(): #isdigit()判断字符串对象是否是纯数字,返回值是布尔型
score = int(score)
if score >= 90:
print('优秀')
elif score >= 80:
print('不错')
elif score >= 60:
print('及格')
else:
print('不及格')
else:
print('您输入的不是整数')
# 方案二
score = input('请输入一个数字: ')
if not score.isdigit():
print('您输入的不是整数')
else:
score = int(score)
if score >= 90:
print('优秀')
elif score >= 80:
print('不错')
elif score >= 60:
print('及格')
else:
print('不及格')
经典案例:如果一个人的年龄大于等于60岁,并且为男性,我们称之为老先生
# 方案一
age = 60
gender = 'male'
if age >= 60 and gender == 'male':
print('old gentleman')
# 方案二
age = 60
gender = 'male'
if age >= 60:
if gender == 'male':
print('old gentleman')