赋值
1、链式赋值:x=y=1 —————相当于x=1;y=1
2、系列数据赋值:a,b,c,d=1,2,3,4 ————相当于a=1;b=2;c=3;d=4
利用系列解包实现变量互换
>>>a,b=1,2
>>>a,b=b,a
>>>print(a,b)
>>>a=2;b=1
3、常量(命名时所有字母都要大写,单词之间用下划线隔开)
python不支持常量,实际上常量是可以修改的,只能逻辑上不做修改
MAX_SPEED=120
print(MAX_SPEED)
>>>120
MAX_SPEED=140 #实际上是可以修改的,只能逻辑上不做修改
print(MAX_SPEED)
>>>140
数据类型
1、整型——整数123
2、浮点型——小数3.1415926
3、布尔型——true、false
4、字符串型——“abc”;“李圈圈小朋友”
一、整型(int)、浮点型(float)
1、运算符:+(加)-(减)*(乘)/(浮点数除法)//(整数除法)%(取余)**(幂)
2、int()实现类型转换:
- 小数,直接取整数部分,小数部分舍去
- 布尔型,转换成0,1
- 字符串不能转,会报错
3、自动转型:整数和浮点数一起运算时,结果自动变成浮点数
4、浮点数一般用a×b形式的科学计数法表示,比如3.14,表示成314E-2或314e-2
5、四舍五入时用round(value),但不会改变原来的值,而是生成新的值
6、增强赋值运算符
练习:定义多点坐标,画出折线,算出起始点到终点的距离
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-x2)**2+(y1-y2)**2) #输出结果 turtle.write(distance) print(distance)
二、布尔型
1、在python3中,布尔值可以直接当1和0使用
2、比较运算符:(==)(!=)(>)(<)(>=)(<=)
3、逻辑运算符:(and)与、(or)或、(not)非——若前者可判断结果,后者不再计算
4、同一运算符:is判断的是id,用于判断是不是一个对象,==(相当于eq()方法)判断的是value,用于比较值是否相等
Python 仅仅对比较小的整数对象进行缓存(范围为[-5, 256])缓存起来,而并非是所有整数对象。需要注意的是,这仅仅是在命令行中执行,而在 Pycharm 或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化(范围是[-5,任意正整数])。
三、字符串
1、字符串的本质:定义好以后就不可以改变了
2、字符串的编码:python3默认使用Unicode码,可以表示世界上任何书面语言的字符,Unicode码中英文长度一样。
- 使用ord()可以把字符串转换成Unicode码
- 使用chr()可以把十进制的数字转换成字符
- 使用len()可以查询字符串长度
3、创建字符串:可以用" "或者' '创建,用''' '''创建多行字符串
4、转义字符
5、字符串拼接:+、*
- 如果+两边是字符串,则拼接
- 如果+两边是数字,则运算
- 如果+两边是不同类型,则报错
- 如果字符串*n,就是字符串重复n次
6、控制台读取字符串:input()
>>> myname = input("请输入名字:")
请输入名字:高淇
>>> myname '高淇
7、str()实现数字转化成字符串
str(5.20)
==> ‘5.20’
str(3.14e2)
==>’314.0’
str(True)
==> ‘True’
8、检索字符串:用[]提取字符串
正向搜索:从最左侧第一个字符,偏移量是 0,第二个偏移量是 1,以此类推。直到 len(str)-1 为止反向搜索:从最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str) 为止
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a[0]
'a'
>>> a[3]
'd'
>>> a[26-1]
'z'
>>> a[-1]
'z'
9、字符串替换:字符串是不可以改变的,但是可以替换replace(),被替换掉的字符串并没有消失,而是对象被赋予了新字符串的id
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a
'abcdefghijklmnopqrstuvwxyz'
>>> a = a.replace('c','高')
'ab 高 defghijklmnopqrstuvwxyz
10、字符串切片 slice:[起始偏移量 start:终止偏移量 end:步长 step],所取字符串不包括end(包头不包尾),无论正向反向取字符串时都是从左到右
正向:
负向:(取字符串时都是从左到右,步长为负时逆序排列)
字符串取字符时,超出字符串长度也不会报错。
11、字符串的分割split()和拼接join()
>>> a = "to be or not to be"
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']
>>> a = ['sxt','sxt100','sxt200']
>>> '*'.join(a)
'sxt*sxt100*sxt200
拼接时,‘jion()’的效率要大于 ‘+’
#测试拼接符“+”与join的运算效率
import time
time01=time.time() #start
a=""
for i in range(1000000):
a+="sxt"
time02=time.time() #end
print('运算时间:'+str(time02-time01))
time03=time.time() #start
li=[]
for i in range(1000000):
li.append("sxt")
a="".join(li)
time04=time.time() #end
print('运算时间:'+str(time04-time03))
=========== RESTART: F:/python/python_yuanwenjian/zifuchuancaozuo.py ===========
运算时间:0.7644081115722656
运算时间:0.1367783546447754
12、字符串的驻留机制和字符串的比较
- 字符串的驻留:python中对于符合标识符规则的字符串(仅包含 _ 、字母、数字)会启用字符串驻留机制驻留
>>> a = "abd_33"
>>> b = "abd_33"
>>> a is b
True
>>> c = "dd#"
>>> d = "dd#"
>>> c is d
False
>>> str01 = "aa"
>>> str02 = "bb"
>>> str01 + str02 is 'aabb'
False
>>> str01 + str02 == 'aabb'
True
13、成员操作符:in/not in
a="abcd"
"b"in a
True
"b" not in a
False
14、字符串查找
我们以一段文本作为测试: a='''我是高淇,今年 18 岁了,我在北京尚学堂科技上班。我的儿子叫高洛希,他 6 岁了。我是一个编程教育的普及者,希望影响 6000 万学习编程的中国人。我儿子现在也开始学习编程,希望他 18 岁的时候可以超过我'''
>>> "*s*x*t*".strip("*")
's*x*t'
>>> "*s*x*t*".lstrip("*")
's*x*t*'
>>> "*s*x*t*".rstrip("*")
'*s*x*t'
>>> " sxt ".strip()
'sxt'
16、大小写转换,例:a = "gaoqi love programming, love SXT"
17、格式排版——center()、ljust()、rjust()
>>> a="SXT"
>>> a.center(10,"*")
'***SXT****'
>>> a.center(10)
' SXT '
>>> a.ljust(10,"*")
'SXT*******'
18、字符串其他操作
>>> "sxt100".isalnum() # 是否为字母或数字
True
>>> "sxt 尚学堂".isalpha() # 检测字符串是否只由字母组成(含汉字)
True
>>> "234.3".isdigit() # 字符串是否只由数字组成
False
>>> "23423".isdigit()
True
>>> "aB".isupper() # 是否为大写字母 islower() 是否为小写字母
False
>>> "A".isupper()
True
>>> "\t\n".isspace() # 检测是否为空白符
True
>>> a = "名字是:{0},年龄是:{1}"
>>> a.format("高淇",18)
'名字是:高淇,年龄是:18'
>>> a.format("高希希",6)
'名字是:高希希,年龄是:6'
>>> b = "名字是:{0},年龄是{1}。{0}是个好小伙"
>>> b.format("高淇",18)
'名字是:高淇,年龄是 18。高淇是个好小伙'
>>> c = "名字是{name},年龄是{age}"
>>> c.format(age=19,name='高淇')
'名字是高淇,年龄是 19'
20、字符串的填充和对齐,: 后面接填充字符
- ^ 居中
- < 左对齐
- > 右对齐
>>> "{:*>8}".format("245")
'*****245'
>>> "我是{0},我喜欢数字{1:*^8}".format("高淇","666")
'我是高淇,我喜欢数字**666***'
21、数字格式化
>>> a = "我是{0},我的存款有{1:.2f}"
>>> a.format("高淇",3888.234342)
'我是高淇,我的存款有 3888.23'
22、可变字符串——io.StringIo
>>> import io
>>> s = "hello, sxt"
>>> sio = io.StringIO(s)
>>> sio
<_io.StringIO object at 0x02F462B0>
>>> sio.getvalue()
'hello, sxt'
>>> sio.seek(7)
7
>>> sio.write("g")
1
>>> sio.getvalue()
'hello, gxt