文章目录
python 基础课程第二天
链式赋值
链式赋值用于同一个对象赋值给多个变量。
x=y=123,相当于x=123, y=123
系列解包赋值
系列数据赋值给对应相同个数的变量(个数必须保持一致)
a,b,c=4,5,6 相当于:a=4,b=5,c=6
- 操作 : 使用系列解包赋值实现变量交换
>>> a,b=10,20
>>> a,b=b,a
>>> a
20
>>> print("a,b")
a,b
>>> print(a,b)
20 10
>>>
常量
python 不支持常量,即没有语法规则限制改变一个常量的值。我们只能约定常量的命名规则,以及在程序的逻辑上不对常量做出修改。
>>> MAX_SPEED=120
>>> print(MAX_SPEED)
120
>>> MAX_SPEED=140
>>> print(MAX_SPEED)
140
>>>
最基本内置数据类型介绍
每个对象都有类型,python中最基本的内置数据类型:
- 整型
整数,2345,10,50 - 浮点型
小数,3.14或科学计数法314e-2 - 布尔型
表示真假,仅包含 Ture, False - 字符串型
由字符组成的序列,“abc”, “sxt”, “尚学堂”
数字和基本运算符
Python 支持整数(如50,520)和浮点数(如3.14和10.0,1.23e2),我们可以对数字做如下运算
使用divmod()函数同时得到商和余数
>>> divmod(10,5)
(2, 0)
>>> divmod(10,4)
(2, 2)
>>> divmod(10,3)
(3, 1)
>>>
整数
Python中,除了10进制,还有其他三种进制:
- 0b或0B,二进制0 1
- 0o或0O,八进制0 1 2 3 4 5 6 7
- 0x或0X,十六进制0 1 2 3 4 5 6 7 8 9 a b c d e f
这三种进制可以方便的进行位运算操作,位运算知识后续介绍
使用INT()实现类型转换:
- 浮点直接舍弃小数部分
- 布尔值True 转为1, False 转为0,
- 字符串符合整数格式(浮点数格式不行)则直接转换为整数,否则报错。
自动转型:
整数和浮点数混合运算时,表达式结果自动转型成浮点数,比如:2+8.0的结果是10.0
整数可以多大
Python2 中,int 是32 位,可以存储从-2147483648 到2147483647 的整数(约±21 亿)。Long 类型是64 位,可以存储:-2^63 -2^63 -1 之间的数值。
Python3 中,int 可以存储任意大小的整数,long 被取消。我们甚至可以存储下面的值:
>>> googol=10**100
>>> googol
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>>
浮点数
浮点数,成为float
浮点数用axb^10形式的科学计数法表示,比如3.14 表示成:314E-2或者314e-2。
这些数值在内存中也是按照科学计数法存储。
类型转换和四舍五入
- 类似于int(), 我们也可以使用float()将其他类型转换成浮点数
- 整数和浮点数混合运算时,自动转变为浮点数
- round(value) 可以返回四舍五入的值
注意:但不会改变原有值,而是产生新的值
增强型赋值运算符
运算符+, -, *, /, **和%%和赋值符=结合可以构成“增强型赋值运算符号”。
a=a+1 等价于a+=1
注意:+=中间不可以加空格
时间的表示
Python中,本质上时间就是一种数字。
计算机的时间表示是从"1970年1月1日00:00:00" 开始,以毫秒 (1/1000秒)进行计算,
>>> import time
>>> time.time()
1641742398.4867318
>>> b=int(time.time())
>>> b
1641742495
>>> totalMinutes=b/60
>>> totalMinutes
27362374.916666668
>>> totalMinutes=b//60
>>> totalMinutes
27362374
>>> totalHours=totalMinutes//60
>>> totalHours
456039
>>> totalDays=totalHours//24
>>> totalDays
19001
>>> totalYears=totalDays//365
>>> totalYears
52
>>>
【操作】定义多点坐标—绘出折线——并计算起点和终点距离
import turtle
import math
#定义多个点坐标
x1,y1=100,100
x2,y2=100,-100
x3,y3=-100,-100
x4,y4=-100,100
#绘制折线
turtle.penup()
turtle.goto(x1,y1)
turtle.pendown()
turtle.goto(x2,y2)
turtle.goto(x3,y3)
turtle.goto(x4,y4)
#计算起始点和终点的距离
distance=math.sqrt((x1-x4)**2+(y1-y4)**2)
turtle.write(distance)
运行结果
布尔值
python 中,把True 和 False定义成了关键字,但他们本质上还是1和0,甚至可以和数字相加
>>> a=True
>>> b=3
>>> a+b
4
>>>
比较运算符
所有比较运算符返回1 表示真,返回0 表示假。这分别与特殊的变量True 和False 等价。
以下假设变量a 为15,变量b 为30:
逻辑运算符
>>> a=True
>>> b=False
>>> a or 30
True
>>> b or 30
30
>>> a or 30/0
True
同一运算符
同一运算符用于比较两个对象的存储单元,也就是对象的地址是否一样。
is 与==区别
is 用于判断两个变量引用对象是否为同一个,即比较对象的地址
==用于判断引用变量引用对象的值是否相同,默认调用对象的_eq_()方法
>>> a=1000
>>> b=1000
>>> a==b
True
>>> a is b
False
>>> id(a)
2309762297520
>>> id(b)
2309762297584
>>> c=10
>>> d=10
>>> c is d
True
>>> id(c)
140709205025456
>>> id(d)
140709205025456
>>>
整数缓存问题
Python 仅仅对比较小的整数对象进行缓存(范围为[-5,256])缓存起来,而并非是所有整数对象。需要注意的是,这仅仅是在命令行中执行,而在Pycharm或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化(范围是[-5,任意正整数])。
总结
- is 比较两个对象的id 值是否相等,是否指向同一个内存地址;
- == 比较的是两个对象的内容是否相等,值是否相等;
- 小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用;
- is 运算符比== 效率高,在变量和None 进行比较时,应该使用is。
字符串
字符串的基本特点
字符串的本质:字符序列。 例如 abc
在python里,字符串是不可变的。我们无法对原字符串进行修改,只能再建一个新的。
python里字符串是一个基本类型,没有字符这个概念,单字符也是字符串。
字符串的编码
python3直接支持Unicode,可以表示世界上任何书面语言的字符,python3的字符默认就是16位Unicode编码,ASCII码是Unicode编码的子集。
内置函数ord(): 把字符转换成对应的Unicode码
内置函数chr(): 把十进制数字转换成对应的字符
引号创建字符串
通过单引号或者双引号创建字符串
使用两种引号的好处是可以创建本身就包含引号的字符串,而不用使用转义字
连续三个单引号或三个双引号,可以帮助我们创建多行字符串
>>> a="I'm a teacher"
>>> print(a)
I'm a teacher
>>> b='my_nmae is "TOM"'
>>> print(b)
my_nmae is "TOM"
>>> resume = ''' "name="高琪"
company="sxt" age=18
lover="Tom"'''
>>> print(resume)
"name="高琪"
company="sxt" age=18
lover="Tom"
>>>
空字符串和len()函数
Python 允许空字符串的存在,不包含任何字符且长度为0
len()用于计算字符串含有多少字符
转义字符
我们可以使用“+特殊字符”,实现某些难以用字符表示的效果。比如:换行等。常见的转义字符有这些:
>>> a="i\nlove\nu"
>>> a
'i\nlove\nu'
>>> print(a)
i
love
u
>>> b='i\'m a teacher'
>>> b
"i'm a teacher"
>>> print(b)
i'm a teacher
>>> print('aaaaaa\
ccccccdddd')
aaaaaaccccccdddd
>>>
字符串的拼接
可以使用+将多个字符串拼接起来。例如:’aa’+ ’bb’ ==>’aabb’。
- 如果+两边都是字符串,则拼接。
- 如果+两边都是数字,则加法运算。
- 如果+两边类型不同,则抛出异常。
字符串复制
使用*可以实现字符串复制。
不换行打印
我们前面调用print 时,会自动打印一个换行符。有时,我们不想换行,不想自动添加换行
符。我们可以自己通过参数end = “任意字符串”。实现末尾添加任何内容
print("aa",end="\n")
print("bb",end="\t")
print("cc")
运行结果
====
aa
bb cc
>>>
>>>
从控制台读取字符串
我们可以使用input()从控制台读取键盘输入的内容。
>>> myname=input("请输入名字:")
请输入名字:gaoqi
>>> myname
'gaoqi'
>>>
str()实现数字转型字符串
str()可以帮助我们将其他数据类型转换为字符串
>>> int("234")
234
>>> float("3.14")
3.14
>>> str(5.20)
'5.2'
>>> str(314)
'314'
>>> str(3.14e2)
'314.0'
>>> str(True)
'True'
当我们调用print()函数时,解释器自动调用了str()将非字符串的对象转成了字符串。
使用[]提取字符
字符串的本质就是字符序列,我们可以通过在字符串后面添加[],在[]里面指定偏移量,可以提取该位置的单个字符。
正向搜索: 最左侧第一个字符,偏移量是0,第二个偏移量是1,以此类推。直len(str)-1 为止。
反向搜索:最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str)为止。
>>> a="abcdefghijklmnopqrstuvwxyz"
>>> a[0]
'a'
>>> a[3]
'd'
>>> a[25]
'z'
>>> a[26]
Traceback (most recent call last):
File "<pyshell#44>", line 1, in <module>
a[26]
IndexError: string index out of range
>>> a[-1]
'z'
>>> a[-10]
'q'
>>> a[-26]
'a'
>>> a[-27]
Traceback (most recent call last):
File "<pyshell#48>", line 1, in <module>
a[-27]
IndexError: string index out of range
replace()实现字符串替换
字符串是“不可改变”的,我们通过[]可以获取字符串指定位置的字符,但是我们不能改变字符串
字符串不可改变。但是,我们确实有时候需要替换某些字符。这时,只能通过创建新的字符串来实现。
整个过程中,实际上我们是创建了新的字符串对象,并指向了变量a,而不是修改了以前的字符串。内存图如下:
>>> a.replace("c","高")
'ab高defghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a=a.replace("c","高")
>>> a
'ab高defghijklmnopqrstuvwxyz'
>>>
字符串切片slice 操作
切片slice 操作可以让我们快速的提取子字符串。标准格式为:
[起始偏移量start:终止偏移量end:步长step]
切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。起始偏移量小于0 则会当做0,终止偏移量大于“长度-1”会被当成-1。
>>> a="abcdefghijklm"
>>> a[2]
'c'
>>> a[1:5]
'bcde'
>>> a[1:5:1]
'bcde'
>>> a[1:5:2]
'bd'
>>> a[:]
'abcdefghijklm'
>>> a[:3]
'abc'
>>> a[3:]
'defghijklm'
>>> a[::-1]
'mlkjihgfedcba'
>>> a[2:400]
'cdefghijklm'
>>> "to be or not to be" [::-1]
'eb ot ton ro eb ot'
>>> "sxtsxtsxtsxtsxt"[0::3]
'sssss'
>>>
split()分割和join()合并
split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔符,则默认使用空白字符(换行符/空格/制表符)
>>> a="to be or not to be"
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.spilt("to")
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
a.spilt("to")
AttributeError: 'str' object has no attribute 'spilt'
>>> a.spilt("to")
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
a.spilt("to")
AttributeError: 'str' object has no attribute 'spilt'
>>> a="to be or not to be"
>>> a.split("to")
['', ' be or not ', ' be']
join()的作用和split()作用刚好相反,用于将一系列子字符串连接起来
>>> a=["sxt","sxt100","sxt200"]
>>> "*".join(a)
'sxt*sxt100*sxt200'
>>> "".join(a)
'sxtsxt100sxt200'
拼接字符串要点:
使用字符串拼接符+,会生成新的字符串对象,因此不推荐使用+来拼接字符串。推荐使用join 函数,因为join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。
import time
time01=time.time()#起始时刻
a=""
for i in range(1000000):
a +="sxt"
time02=time.time() #终止时刻
print("运算时间:"+str(time02-time01))
time03=time.time()#起始时刻
li=[]
for i in range(1000000):
li.append("sxt")
a="".join(li)
time04=time.time()#终止时刻
print("运算时间:"+str(time04-time03))
运算结果
============== RESTART: C:/01-工作相关/python_exec/mypy07.py =============
运算时间:0.4812157154083252
运算时间:0.1300349235534668
>>>
字符串驻留机制和字符串比较
字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。 Python支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母 和数字)会启用字符串驻留机制驻留机制。
字符串比较和同一性
我们可以直接使用==,!=对字符串进行比较,是否含有相同的字符。
我们使用is / not is,判断两个对象是否同一个对象。比较的是对象的地址,即id(obj1)是否和id(obj2)相等。
成员操作符
in /not in 关键字,判断某个字符(子字符串)是否存在于字符串中。
>>> a="abc_33"
>>> b="abc_33"
>>> a is b
True
>>> id(a)
2269402208176
>>> id(b)
2269402208176
>>> a==b
True
>>> c = "dd#"
>>> d = "dd#"
>>> c is d
False
>>> id (c)
2269402208112
>>> id(d)
2269401704368
>>> c==d
True
>>> a="abcdefg"
>>> "b" in a
True
>>> "bcd" in a
True
>>> "ddd" in a
False
>>> "ddd" not in a
True
>>>
字符串常用方法汇总
常用查找方法
我们以一段文本作为测试: a=’’‘我是高淇,今年18 岁了,我在北京尚学堂科技上班。我的儿子叫高洛希,他6岁了。我是一个编程教育的普及者,希望影响6000 万学习编程的中国人。我儿子现在也开始学习编程,希望他18 岁的时候可以超过我’’’
去除首尾信息
我们可以通过strip()去除字符串首尾指定信息。通过lstrip()去除字符串左边指定信息, rstrip()去除字符串右边指定信息。
大小写转换
编程中关于字符串大小写转换的情况,经常遇到。我们将相关方法汇总到这里。为了方便学习,先设定一个测试变量:
a = “gaoqi love programming, love SXT”
格式排版
center()、ljust()、rjust()这三个函数用于对字符串实现排版
其他方法
- isalnum() 是否为字母或数字
- isalpha() 检测字符串是否只由字母组成(含汉字)。
- isdigit() 检测字符串是否只由数字组成。
- isspace() 检测是否为空白符
- isupper() 是否为大写字母
- islower() 是否为小写字母
字符串的格式化
format()基本用法
Python2.6 开始,新增了一种格式化字符串的函数str.format(),它增强了字符串格式化的 功能。
基本语法是通过{} 和: 来代替以前的% 。
format 函数可以接受不限个参数,位置可以不按顺序。
填充与对齐
填充常跟对齐一起使用 ^、<、>分别是居中、左对齐、右对齐,后面带宽度 :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
数字格式化
浮点数通过f,整数通过d 进行需要的格式化