主要是数字类型及操作和字符串类型及操作,还有一些别的杂七杂八的东西
数字类型及操作
整数
无限制,没有C的取值范围
有四种表示形式:
- 十进制
- 二进制,以0b或者0B开头
- 八进制,以0o或者0O开头
- 十六进制,以0x或0X开头
**int(x)**函数,将浮点数舍弃小数部分转化成整数(好像复数不能用)
浮点数
有取值范围和精度范围,精度范围达到10-16
两个浮点数之间的运算存在“不确定尾数”,即上篇提到的浮点数的bug
不确定尾数发生在10-16左右,即精度范围处,即0.3000000……4,中间全是0
在运算与比较时,常使用round()函数,round(0.1+0.2 , 1)类似的用法十分有效
与C类似,Python同样用e或E来表示科学计数法,aE10即可表达a10
**float(x)**函数,将整数转化成浮点数,即加上.0 (……此处应有吐槽……)
复数
居然有复数……
复数表达为实部+虚部j
的写法
当一个变量被赋值成复数后,变量.real
表示实部,变量.imag
表示虚部
复数会保留成带括号的形式,而实部与虚部分别表示成浮点数
**complex(x)**所以你一定猜到是变成复数了,加上+0j……
运算符号
需要注意的是,与C中不同,除法一定是浮点数形式,多加了一个整数除的运算,即像C的整数除以整数一样,是只得到整数的结果,运算符号是“//”
6/2 10/3
结果是3.0 、 3.3333
6//2 10//3
结果是3 、 3
x**y
是对x进行幂运算,y可以为小数,是开方运算
二元运算除了+=,-=,*=,/=外,还有//=,%=,**=这些,意义相同,都是x=x相应运算y
Python的运算可以多种数字类型来做,最后选类型最宽的一种,整数<浮点数<复数
如11+3.0
结果是14.0
几个运算函数
pow(x,y[,z]) 计算x的y次方(然后取余z)
计算x的y次方,可以嵌套,比如pow(2,pow(2,100))是可以的,与x**y类似,可以没有z就此结束,加上z就再做一个取余运算,最后输出余数
divmod(x,y) 商余
计算x//y与x%y输出(整数商,余数)
max(x1,x2…)
取最大值
min(x1,x2…)
取最小值
字符串类型及操作
编码形式
python三及以上的版本,字符串全部使用Unicode编码形式,这种编码形式可以支持包括汉字,日语,各种奇奇怪怪的字符等等一系列的字符,使用十六进制数的形式来对应
类型
有两类共四种表示方式
- 一类是单行字符串,用一对单引号或双引号表示
- 另一类是多行字符串,用一对三单引号或三双引号表示
‘’’…
…’’’
想到多行注释的写法也是这样……发现Python中并没有给出真正多行注释的写法,只是多行字符串如果没有进行任何操作就可以当作注释来使用
提供看起来很睿智的三双引号的表示方法是因为:如果想要在字符串文本中使用单引号或者双引号的话,就应该在字符串两边用另一种,如'..."...'
就是在字符串中使用了双引号,同理如果想使用单引号就在字符串两边使用双引号。
如果想要在字符串中既使用单引号又使用双引号,就必须使用多行字符串的’’’,这样在出现不是连续三个’’'时都可以使用单引号或者双引号
另一个使用单双引号的方法是用转义符,与C类似,同样\n换行,\r回车,\b退格,双引号单引号可以用"与’来表示,字符串"...\"...'
在打印时就会变成..."...
操作
切片的高级用法
之前简单说过切片的用法,这里更高级了
<字符串>[M: N: K]
当M缺失时表示从头开始,N缺失表示至结尾
当使用MNK时,表示从M开始,到N结束,以步长为K来截取
例如
'012345'[::2]
最后就会得到024,以此理解步长
有一个由此引申把字符串倒过来的小技巧
'<字符串>'[::-1}
这样就可以把字符串倒过来……C语言流下了眼泪
但是好像不能在其它形式时将K使用为负数,就算写上MN并且M=0,N=n-1,K=-1时程序也不能运行
字符串操作符
-
x+y
将x与y字符串连接,形成新字符串(我已经不会惊讶了 -
x*n或n*x
将字符串x复制n次,n为整数 -
x in y
x是y的字串,返回True,不是返回False
字符串处理函数
-
len(x)
x是字符串,函数结果返回字符串的长度 -
str(x)
任意类型的数据转化为字符串类型,即在两端加上单引号,与eval(x)是相反作用的函数 -
hex(x)与oct(x)
x是整数类型,分别返回为x的十六进制字符串形式和x的八进制字符串形式 -
chr(u)
u是Unicode编码,可以返回向对应的字符。如9800~9811对应的是十二星座的符号,可以试着玩一下 -
ord(x)
x是符号,与chr(u)函数对应,这个函数可以输出符号对应的Unicode编码
字符串处理方法(首先注意这里方法是一个专有名词)(然后这一部分划重点)
方法是一种必须通过<a>.<b>()
的形式来使用的函数,其中<a>
是一个对象(我好像看到了什么大坑 )<b>()
是函数,这里用“方法”来称呼,一下这一部分字符串处理方法很常用。
-
str.upper
返回字符串副本,将全部字符转化为大写形式(英文单词,起码阿拉伯数字没有变化) -
str.lower
与上一个方法相反,这里转化为小写形式,这两个方法都可以直接在print函数里使用,print('str'.upper()/lower())
这样的写法都是可以的,不是指取自什么 - **
str.split()
**现在理解其基础用法,split()中括号中的元素以字符串形式出现,这个用法可以把一个字符串通过某个符号分割开来,这个符号必须在str中存在,否则编译器会报错,每出现一个相应符号,便分割一次,最后以列表形式返回,列表中的元素都是字符串,例print("abc,123,45,6".split(",")
最后返回结果为["abc", "123", "45", "6"]
以该例子理解上述我也看不太懂写了什么的东西。在split()括号中出现多个字符串,如split(',''.')
这样的东西就要要求str中必须有连着的,.
才能分割。 -
str.count(sub)
作用是计数sub子字符串在str字符串中出现的次数,sub子字符串以字符串形式出现,例print("an apple a day".count("a")
返回结果为4 -
str.replace(old, new)
作用是替换,将str中的old字符串全部替换为new字符串。 -
str.center(width[, fillchar])
作用是将str字符串在一个长度为width的宽度上居中,fillchar是在两端的填充,可以不写,为空,填充的字符fillchar以字符串形式写入。 -
str.strip(chars)
作用是去掉在str中最左侧和最右侧的"chars",将全部要去掉的字符写在一个"chars"里,chars以字符串的形式写入,注意里面不要乱加空格,因为空格也会被当作要去掉的东西。例print("i loved a girl".strip(" il")
最后会返回"oved a gir"
左右两端只要出现不是"chars"中任意一个字符的字符,这一侧的删除就停止。 -
str.join(iter)
作用是在字符串iter中,除最后一个元素外的每一个元素后面加入一个str,例print(",".join("123456")
可以返回"1,2,3,4,5,6"
主要用于格式化输出和分割字符串
字符串类型的格式化
对字符串进行格式表达的方法
使用.format()
方法,格式如此:<模板字符串>.format(逗号分隔的参数>)
给出定义槽:用一对大括号表示,是一个占位信息符{}
例:"...{}...{}...{}".format("<a>","<b>","<c>")
在默认状态下,槽的先后顺序为0,1,2……与后面的字符串相对应,后面如果是数字可以不用字符串的写法。如果想要改变槽的对应位置,则在槽中填写对应的编号,例如:...{1}...{0}...{2}.".format("<a>",<b>",<c>")
就可以改变槽的填入的顺序,将1,0,2对应的字符串输入
在槽的内部,也可以使用一些操作符号
标准形式是<参数序号>:<格式控制符号>
其中":"是引导符号一共有六种操作类型,分别是
- <填充>:用于填充的单个字符
- <对齐>:<左对齐;>右对齐;^居中对齐
- <宽度>:单位是字符
- <, >:数字的千位分隔符
- < .精度>:.nf与.n
- 类型:b二进制形式,cUnicode编码形式,d整数形式,o八进制形式,x十六进制形式,X大写的十六进制形式,以上五种均为整数类型,以下为浮点数类型,f浮点数形式,e科学计数法表示浮点数形式,E以大写E的科学计数法表示浮点数形式,%以百分数形式表示浮点数
(解决了开始时print的输出的形式)
这些控制符都写在一起,顺序必须分别是123456,
123算一类,是通用的操作方法,例:"{0:=^10}".format("cyy")
结果会输出===cyy====
顺便一提两边填充不对称时左边少一个
当不写填充时,默认填充为空格,不写对齐时,默认左对齐
另外三个456算作另一类,是数字的相关操作
其中4只有在用于输出为字符串用作给人阅读时使用,常用于财务,如各种考试报名系统,教师管理系统(你为什么这么熟练啊 )
5是浮点数的小数位数,或者是字符串的最大输出长度,输出浮点数时,最后对应format后的也必须是浮点数,不能加引号,输出字符串的长度时即.n。注意要与"{:n}".format()
宽度区别,字符串不够宽度会补,字符串超过宽度按原字符串输出,但精度会删去多余的部分
6是以各种类型输出整数类型的数字或浮点数类型的数字
库引用的另一种写法
除了用import+库
库.函数 外,还可以这么写
from 库 import*
函数
如import turtle turtle.setup(a,b)
就可以变成from turtle import* setup(a,b)
但这种引用方式带来一个问题,通过这种方式引用的函数,算作一个在该程序中定义了的函数,可能与自己定义的函数或者其它库中的函数重名,发生问题
还有一个方法
import 库 as 库别名
库别名.函数
这样可以自己给库起一个小名,起成自己的名字什么的都可以
如果只想引用某一个函数,也可以
from 库 import 函数
函数()
for循环语句和range()函数
for 变量 in range(参数):
...
...
如
for i in range(5):
print(i)
会输出0 1 2 3 4 (每个数字换一次行)
range()函数的作用是产生一个循环序列
如range(5)就是产生0 1 2 3 4
还可以range(M , N)
作用是产生从M到N-1的整数序列
如range(2 , 5)就可以产生2 3 4