链式赋值
当多个变量是同一个值时,可以同时赋值。
a=b=123
#等价于
a=123
b=123
系列解包赋值
注意一一对应,个数必须相同。
a,b,c=1,2,3
#等价于
a=1
b=2
c=3
该方法也可以实现变量间的值互换
a,b=1,2
a,b=b,a
这样输出结果就由原a=1,b=2变为a=2,b=1
常量
python实际上不支持常量定义,我们只是通过默认的命名规则提示自己这是常量。使用大写来表示常量
CONSTANT_VALUE=1#大写就相当于常量,实际上它依旧可以被更改
基本的内置数据类型
整型整数。例:2345,10,…
浮点型小数。例:3.14或使用科学计数法314e-2
布尔型真假,只包含Ture与False两种。
字符串型有字符串组成的序列。例:“关注”,“temmie”
数字能进行的运算
包含整数与浮点数,
运算符 | 说明 | 例子 | 结果 | 注 |
---|---|---|---|---|
+ | 加法 | 1+2 | 3 | |
- | 减法 | 2-1 | 1 | |
* | 乘法 | 2*2 | 4 | |
/ | 浮点数除法 | 4/2 | 2.0 | 注意结果是浮点数 |
// | 整数除法 | 7//2 | 3 | 小数部分直接舍去,不是四舍五入 |
% | 模(取余) | 7%4 | 3 | |
** | 幂 | 2**3 | 8 |
注意:除法的时候不允许0作除数。
如果想同时得到商和余数可以使用 divmod() 函数
增强型运算符
运算符 | 例子 | 等价 |
---|---|---|
+= | a+=2 | a=a+2 |
-= | a-=2 | a=a-2 |
*= | a*=2 | a=a*2 |
/= | a/=2 | a=a/2 |
//= | a//=2 | a=a//2 |
**= | a**=2 | a=a**2 |
%= | a%=2 | a=a%2 |
比较运算符
运算符 | 描述 | 例子a,b=15,30 |
---|---|---|
== | 等于,比较对象的值是否相等 | (a == b) 返回 False |
!= | 不等于, 比较两个对象的值是否不相等 | (a != b) 返回 true |
> | 大于 ,返回 x 是否大于 y | (a > b) 返回 False |
< | 小于,返回 x 是否小于 y | (a < b) 返回 true |
>= | 大于等于,返回 x 是否大于等于 y | (a >= b) 返回 False |
<= | 小于等于, 返回 x 是否小于等于 y | (a <= b) 返回 true |
逻辑运算符
运算符 | 格式 |
---|---|
or | 逻辑或 x or y |
and | 逻辑与 x and y |
not | 逻辑非 not x |
什么true还是false,不如直接01表示看的直接,但这样有缺点
x | y | or返回值 | and返回值 |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 |
x | not的返回值 |
---|---|
0 | 1 |
1 | 0 |
注意表中所说的不计算,直接返回。这意味着你后面的数无论是什么,哪怕是会报错的内容,它都不会去管。
30/0会报错:不能将0作为除数
但是使用or时,如果前面已经为true,会略过后面不报错
同一运算符
运算符 | 描述 |
---|---|
is | is 是判断两个标识符是不是引用同一个对象 |
is not | is not 是判断两个标识符是不是引用不同对象 |
==是比较的两个变量的值,而is是比较地址。
pycharm上试验没做出来效果,可能优化器又有变动了。
又尝试了几种方法
整数
python中包含十进制、二进制(0b 0B)01表示、八进制(0o 0O)0-7表示和十六进制(0x 0X)0-f表示
例:15
进制 | 表示 |
---|---|
十进制 | 15 |
二进制 | 1111 |
八进制 | 17 |
十六进制 | f |
浮点数
float,可以使用正常表示方法3.14或科学计数法314e-2
布尔值
True真,False假本质上依旧是数字,可以与数相加。
字符串
字符串在定义好后无法改变。使用的是unicode编码,16位。
可以使用ord()把字符转化为unicode码;使用chr()把十进制数字转化为对应的字符
创建字符串
使用’或"
若果字符串中包含’,可以把外面的写成"。
使用三个单引号’’‘创建多行字符串。
空字符串:’’,使用length可以查询该字符长度为0。
可变字符串
需要使用io模块
import io
a='temmie!!'
print(a)
s=io.StringIO(a)
print(s)
b=s.getvalue()#获得字符
print(b)
s.seek(1)#指针移动到第二个字符
s.write('t')#在该位置写一个字符
c=s.getvalue()
print(c)
转义字符
转义字符 | 描述 |
---|---|
(在行尾时) | 续行符 |
\ | 反斜杠符号 |
’ | 单引号 |
" | 双引号 |
\b | 退格(Backspace) |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
字符串拼接
使用 + 要求两侧必须都是字符串,或者直接空格也可以。拼接后是生成新的对象。
字符串复制
在字符串后写*次数
不换行打印
默认print的结尾是换行符,所以每次打印都在新的一行,也可以用end来指定最后的内容
控制台读取字符串
input(内容)从控制台读取字符串,括号内的内容是显示在控制台提示你输入的,接下来程序会等你输入并回车后继续。
提取字符
使用[]提取字符
从左向右的索引为0到n-1,也可以从右向左-1-到-n
字符替换
replace()实现替换,但要注意,这个替换是生成了新的对象,原对象没有变。
字符串切片
截取字符串
操作和说明 | 示例 | 结果 |
---|---|---|
[:] 提取整个字符串 | “abcdef”[:] | “abcdef” |
[start:]从 start 索引开始到结尾 | “abcdef”[2:] | “cdef” |
[:end]从头开始直到 end-1 | “abcdef”[:2] | “ab” |
[start :end]从 start 到 end-1 | “abcdef” | [2:4] “cd” |
[start: end:step]从 start 提取到end-1,步长是 step | “abcdef”[1:5:2] | “bd” |
实例 | 说明 | 结果 |
---|---|---|
“abcdefghijklmnopqrstuvwxyz”[-3:] | 倒数三个 | “xyz” |
“abcdefghijklmnopqrstuvwxyz”[-8:-3] | 倒数第八个到倒数第三个(包头不包尾) | ‘stuvw’ |
“abcdefghijklmnopqrstuvwxyz”[::-1] | 步长为负,从右到左反向提取 | ‘zyxwvutsrqponmlkjihgfedcba’ |
如果终止偏移量范围比实际的大,则取到最后就结束,不会报错。
字符串分割
split()基于指定的分割符对字符串进行分割。如不填写则默认按换行符、空格、制表符分割。
字符合并
join()函数,不写就是正常拼接,写的话就会在拼接位置加入字符。使用这个函数比+性能更高。
注意!的个数。
字符串比较
字符串驻留机制如果字符串符合python的标识符命名规则,则会驻留,如果给a与b同时赋值则两个用is比较是相等,如果不符合则不会驻留,两个的is比较为False。不过这个内容再pycharm中似乎不起作用。
字符串的比较使用 == 、 != 来进行字符串比较。使用 in 、 not in来判断字符串是否在指定字符串内
字符串常用的一些语法
a='我是temmie1024'
ans1=len(a)#字符串的长度
ans2=a.startswith('我是')#是否以 我是 开头
ans3=a.endswith('24')#是否以 24 结尾
ans4=a.find('m')#查找第一个 m 的位置
ans5=a.rfind('m')#查找最后一个 m 的位置
ans6=a.count("m")#查找 m 出现的次数
ans7=a.isalnum()#a 是否全部为字符或数字
print(ans1,ans2,ans3,ans4,ans5,ans6,ans7)
ans1="*s*x*t*".strip("*")##去除首尾*
ans2="*s*x*t*".lstrip("*")#去除首*
ans3="*s*x*t*".rstrip("*")#去除尾*
ans4=" sx t ".strip()#去除首尾空格,中间不算
print(ans1,ans2,ans3,ans4)
a='temmie eimmet'
ans1=a.capitalize()#产生新的字符串,首字母大写
ans2=a.title()#产生新的字符串,每个单词都首字母大写
ans3=a.upper()#产生新的字符串,所有字符全转成大写
ans4=ans3.lower()#产生新的字符串,所有字符全转成小写
ans5=ans1.swapcase()#产生新的字符串,所有字符全转成小写
print(ans1,'\n',ans2,'\n',ans3,'\n',ans4,'\n',ans5)
a="SXT"
a1=a.center(10,"*")#居中,使用*填充,总长度10
a2=a.center(10)#居中,使用空格填充,总长度10
a3=a.ljust(10,"*")#左对齐,使用型号填充,总长度10
print(a,'\n',a1,'\n',a2,'\n',a3)
a='temmie'
ans1=a.isalnum()#是否为字母或数字
ans2=a.isalpha()#检测字符串是否只由字母组成(含汉字)。
ans3=a.isdigit()#检测字符串是否只由数字组成。
ans4=a.isspace()#检测是否为空白符
ans5=a.isupper()#是否为大写字母
ans6=a.islower()#是否为小写字母
print(ans1,'\n',ans2,'\n',ans3,'\n',ans4,'\n',ans5,'\n',ans6)
字符串格式化
推荐使用.format()函数实现,{}作为占位符,是要填进去的内容
可以重复匹配
{}中可以写索引名,这样顺序就不需要一一对应了。
填充与对齐
:进行填充,数字表示总长度;使用^进行居中;<进行左对齐;>进行右对齐,如果不写符号用空格补齐。
a='名字是{name:!<9},是{type:!^4},但它真的是{type:?>6}吗?'
print(a.format(name='temmie',type='狗'))
数字格式化
浮点数通过f,整数通过d进行格式化。2f相当于浮点数保留两位小数
数字 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} | 3.14 | 带符号保留小数点后两位 |
2.71828 | {:.0f} | 3 | 不带小数 |
5 | {:0>2d} | 05 | 数字补零 (填充左边, 宽度为 2) |
5 | {:x<4d} | 5xxx | 数字补 x (填充右边, 宽度为 4) |
10 | {:x<4d} | 10xx | 数字补 x (填充右边, 宽度为 4) |
1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00E+09 | 指数记法 |
13 | {:10d} | (前面有八个空格)13 | 右对齐 (默认, 宽度为 10) |
13 | {:<10d} | 13(后面有八个空格) | 左对齐(宽度为 10) |
13 | {:^10d} | 左边有四个空格)13(右边有四个空格) | 中间对齐(宽度为 10) |
类型转换
int()
1.可使浮点数舍去小数部分变为整数
2.可将布尔值(True)转化为1,(False)转化为0
3.字符串符合整数格式(不能包含中英文字符,小数)则转化为对应的整数,其他会报错。
自动转型
整数与浮点数混合运算,自动转换为浮点数
四舍五入
使用round()函数进行四舍五入
float()
用法与int类似
str()
实现数字转成字符串
获取时间
time.time()
获取的值是相对于1970年1月1日秒数。
练习
绘制一个方形并计算初始点与起始点的距离
import turtle
import math
x1,x2,x3,x4,y1,y2,y3,y4=50,50,-50,-50,50,-50,-50,50
turtle.width(10)
turtle.penup()
turtle.goto(x1,y1)
turtle.pendown()
turtle.goto(x2,y2)
turtle.goto(x3,y3)
turtle.goto(x4,y4)
turtle.goto(x1,y1)
distance=math.sqrt((x1-x4)**2+(y1-y4)**2)
print(distance)