举个简单的例子4+5=9.例子中,4和5被称为操作数,'+'称为运算符.
假设变量a为10,变量b为21:
+加-两个对象相加输出结果31
-减-得到负数或是一个数减去另一个数输出结果-11
*乘-两个数相乘或是返回一个被重复若干次的字符串输出结果210
/除-x除以y输出结果为2.1
%取模-返回除法的余数输出结果1
**幂-返回x的y次幂输出结果为10的21次
//取整除-返回商的整数部分9//2输出结果4,9.0//2.0输出结果4.0
a=21
b=10
c=0
c=a+b
print("1-c的值为:",c)
c=a-b
print("2-c的值为:",c)
c=a*b
print("3-c的值为:",c)
c=a/b
print("4-c的值为:",c)
c=a%b
print("5-c的值为:",c)
#修改变量a、b、c
a=2
b=3
c=a**b
print("6-c的值为:",c)
a=10
b=5
c=a//b
print("7-c的值为:",c)
1-c的值为:31
2-c的值为:11
3-c的值为:210
4-c的值为:2.1
5-c的值为:1
6-c的值为:8
7-c的值为:2
假设变量a为10,变量b为20
所有比较运算符返回1表示真,返回0表示假
==等于-比较对象是否相等返回False
!=不等于-比较两个对象是否不相等返回True
>大于-返回x是否大于y返回False
<小于-返回x是否小于y返回True
>=大于等于-返回x是否大于等于y返回False
<=小于等于-返回x是否小于等于y返回True
a=21
b=10
c=0
if(a==b):
print("1-a等于b")
else:
print("1-a不等于b")
if(a!=b):
print("2-a不等于b")
else:
print("2-a等于b")
if(a<b):
print("3-a小于b")
else:
print("3-a大于等于b")
if(a>b):
print("4-a大于b")
else:
print("4-a小于等于b")
#修改变量a和b的值
a=5;
b=20;
if(a<=b):
print("5-a小于等于b")
else:
print("5-a大于b")
if(b>=a):
print("6-b大于等于a")
else:
print("6-b小于a")
1-a不等于b
2-a不等于b
3-a大于等于b
4-a大于b
5-a小于等于b
6-b大于等于a
以下假设变量a为10,变量b为20
=简单的赋值运算
+=加法赋值运算c+=a等价于c=c+a
-=减法赋值运算
*=乘法赋值运算
/=除法赋值运算
%=取模赋值运算符
**=幂赋值运算符
//=取整数赋值运算符
a=21
b=10
c=0
c=a+b
print("1-c的值为:",c)
c+=a
print("2-c的值为:",c)
c*=a
print("3-c的值为:",c)
c/=a
print("4-c的值为:",c)
c=2
c%=a
print("5-c的值为:",c)
c**=a
print("6-c的值为:",c)
c//=a
print("7-c的值为:",c)
1-c的值为:31
2-c的值为:52
3-c的值为:1092
4-c的值为:52.0
5-c的值为:2
6-c的值为:2097152
7-c的值为:99864
按位运算符是把数字看作二进制来进行计算的.
下表中变量a为60,b为13二进制格式
a=0011 1100
b=0000 1101
a&b=0000 1100
a|b=0011 1101
a^b=0011 0001
~a=1100 0011
&按位运算符,参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
|按位或运算符,只要对应的二个二进位有一个为1时,结果位就为1.
^按位异或运算符,当两位对应的二进位相异时,结果为1
~按位取反运算符,对数据的每个二进制位取反
<<左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0
a<<2输出结果240,二进制解释:1111 0000
>>右移动运算符,同左移动运算符
a=60#60=0011 1100
b=13#13=0000 1101
c=0
c=a&b;#12=0000 1100
print("1-c的值为:",c)
c=a|b;#61=0011 1101
print("2-c的值为:",c)
c=a^b;#49=0011 0001
print("3-c的值为:",c)
c=~a;#-61=1100 0011
print("4-c的值为:",c)
c=a<<2;#240=1111 0000
print("5-c的值为:",c)
c=a>>2;#15=0000 1111
print("6-c的值为:",c)
1-c的值为:12
2-c的值为:61
3-c的值为:49
4-c的值为:-61
5-c的值为:240
6-c的值为:15
and x and y布尔与:如果x为False,x and y返回False,否则它返回y的计算值.
or x or y布尔或:如果x是True,它返回x的值,否则它返回y的计算值.
not not x布尔非:如果x为True,返回False。如果x为False,它返回True.
a=10
b=20
if(a and b):
print("1-变量a和b都为true")
else:
print("1-变量a和b有一个不为true")
if(a or b):
print("2-变量a和b都为true,或其中一个变量为true")
else:
print("2-变量a和b都不为true")
#修改变量a的值
a=0
if(a and b):
print("3-变量a和b都为true")
else:
print("3-变量a和b有一个不为true")
if(a or b):
print("4-变量a和b都为true,或其中一个变量为true")
else:
print("4-变量a和b都不为true")
if not(a and b):
print("5-变量a和b都为false,或其中一个变量为false")
else:
print("5-变量a和b都为true")
1-变量a和b都为true
2-变量a和b都为true,或其中一个变量为true
3-变量a和b有一个不为true
4-变量a和b都为true,或其中一个变量为true
5-变量a和b都为false,或其中一个变量为false
in:如果在指定的序列中找到值返回True,否则返回False.
not in:如果在指定的序列中没有找到值返回True,否则返回False
a=10
b=20
list=[1,2,3,4,5];
if(a in list):
print("1-变量a在给定的列表中list中")
else:
print("1-变量a不在给定的列表中list中")
if(b not in list):
print("2-变量b不在给定的列表中list中")
else:
print("2-变量b在给定的列表中list中")
#修改变量a的值
a=2
if(a in list):
print("3-变量a在给定的列表中list中")
else:
print("3-变量a不在给定的列表中list中")
1-变量a不在给定的列表中list中
2-变量b不在给定的列表中list中
3-变量a在给定的列表中list中
身份运算符:身份运算符用于比较两个对象的存储单元
is:is是判断两个标识符是不是引用自一个对象
is not:is not是判断两个标识符是不是引用自不同对象
注意:is函数用于获取对象的内存地址,例如is(a)获取的是a的内存地址
a=20
b=20
if(a is b):
print("1-a和b有相同的标识")
else:
print("1-a和b没有相同的标识")
if(id(a)==id(b)):
print("2-a和b有相同的标识")
else:
print("2-a和b没有相同的标识")
#修改变量b的值
b=30
if(a is b):
print("3-a和b有相同的标识")
else:
print("3-a和b没有相同的标识")
if(a is not b):
print("4-a和b没有相同的标识")
else:
print("4-a和b有相同的标识")
1-a和b有相同的标识
2-a和b有相同的标识
3-a和b没有相同的标识
4-a和b没有相同的标识
is用于判断两个变量引用对象是否为同一个,==用于判断引用变量的值是否相等
>>>a=[1,2,3]
>>>b=a
>>>b is a
True
>>>b==a
True
>>>b=a[:]
>>>b is a
False
>>>b==a
True
不必在意运算符优先级,是在搞不清楚可以使用括号()
**指数(最高优先级)
~+-按位翻转,一元加号和减号(最后两个方法的名为+@和-@)
*/%//乘,处,取模和取整数
+-加法减法
>><<右移,左移运算符
&位与
^|位运算符
<=<>>=比较运算符
<>==!=等于运算符
=%=/=//=-=+=*=**=赋值运算符
is is not身份运算符
in not in成员运算符
and or not逻辑运算符
a=20
b=10
c=15
d=5
e=0
e=(a+b)*c/d#(30*15)/5
print("(a+b)*c/d运算结果为:",e)
e=((a+b)*c)/d#(30*15)/5
print("((a+b)*c)/d运算结果为:",e)
e=(a+b)*(c/d);#(30)*(15/5)
print("(a+b)*(c/d)运算结果为:",e)
e=a+(b*c)/d;#20+(150/5)
print("a+(b*c)/d运算结果为:",e)
`
(a+b)*c/d运算结果为:90.0
((a+b)*c)/d运算结果为:90.0
(a+b)*(c/d)运算结果为:90.0
a+(b*c)/d运算结果为:50.0
python在交互式环境中,编译器会有一个小整数池的概念,会把(-5,256)间的数预先创建好,而当a和b超过这个范围的时候,两个变量就会指向不同的对象了,因此地址也会不一样,比如下例:
>>>b=5
>>>a=5
>>>id(a)
162334512
>>>id(b)
162334512
>>>a=1000
>>>b=1000
>>>id(a);id(b)
2236612366224
2236617350384
>>>
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
class Solution:
def NumberOf1(self,n):
#write code here
cnt=0
if n<0:
n=n&0xffffffff
while n:
cnt+=1
n=(n-1)&n
return cnt
python数字数据类型用于存储数值.
数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内容空间.
complex(x)将x转换到一个复数,实数部分为x,叙述部分为0
complex(x,y)将x和y转换到一个复数,实数部分为x,虚数部分为y,x和y是数字表达式.
在交互模式中,最后被输出的表达式结果被赋值给变量_,_变量应被用户视为只读变量,因为如果你调用了_变量后,之后的_变量会变成最后输出的值,只有用del删除对象引用才会让_重新变为最后输出的表达式结果.
以下为系统内置数字运算函数:
abs(x):返回数字的绝对值,整型返回整型,浮点型返回浮点型.
max(x1,x2,...):返回给定参数的最大值,参数可以为序列.
min(x1,x2,...):返回给定参数的最小值,参数可以为序列.
modf(x):返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示.
pow(x,):x**y运算后的值.
round(x[,n]):返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数.
sqrt(x):返回数字x的平方根
以下是math模块的函数:
ceil(x):返回数字的上入整数,即往上取整.
exp(x):返回e的x次幂.
fabs(x):返回数字的绝对值,整型和浮点型都会返回浮点型.
floor(x):返回数字的下舍整数,即往下取整.
log(x):log函数.
随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性.
以下所有函数均来自random模块:
choice(seq):从序列的元素中随机挑选一个元素,
randrange([start,]stop[,step]):从指定范围内,按指定基数递增的结合中获取一个随机数,基数缺省值为1(即为1的整数倍)
random():随机生成下一个实数,他在[0,1}范围内.
seed([x]):改变随机数生成器的种子seed,python会帮你选择seed(暂不懂)
shuffle(lst):将序列的所有元素随机排序.
uniform(x,y):随机生成一个实数,他在[x,y]范围内.
randint(x,y):随机生成一个整数int类型,可以指定整数的范围
sample(sequence,length):可以从指定的序列中,随机的截取指定长度的片断,不修改原序列.
以下函数均来自math模块,acos(x):返回x的反余弦弧度值
asin(x):返回x的反正弦弧度值
atan(x):返回x的反正切弧度值
atan2(y,x):返回给定的x及y坐标值的反正切值
cos(x):返回x的幅度的余弦值
hypot(x,y):返回欧几里得范数sqrt(x*x+y*y)
sin(x):返回x弧度的正弦值
tan(x):返回x弧度的正切值
degrees(x):将弧度转换为角度,如degrees(math.pi/2),返回90.0
radians(x):将角度转换为弧度
pi:数学常量(圆周率,一般以π表示)
e:数学常量e,e即自然常数.
浮点数的表示在计算机中并不准确:
round(10.5)=10;round(11.5)=11.
“4舍6入5看齐,奇进偶不进”我觉得并不是因为浮点数在计算机表示的问题。计算机浮点数的表示是ieee定义的标准规则,如果python中存在,没道理其他语言中不存在。事实上是因为该取舍方法比过去的"四舍五入"方法在科学计算中更准确。而国家标准也已经规定使用“4舍6入5看齐,奇进偶不进”取代"四舍五入".
从统计学的角度上来讲,如果大量数据无脑的采用四舍五入会造成统计结果偏大。而"奇进偶舍"可以将舍入误差降到最低。
奇进偶舍是一种比较精确比较科学的计数保留法,是一种数字修约规则。
其具体要求如下(以保留两位小数为例):
(1)要求保留位数的后一位如果是4或者4以下的数字,则舍去,例如5.214保留两位小数为5.21。
(2)如果保留位数的后一位如果是6或者6以上的数字,则进上去,例如5.216保留两位小数为5.22。
(3)如果保留位数是保留整数部分或保留一位小数,则要根据保留位来决定奇进偶舍:
(4)如果保留位数的后一位如果是5,且该位数后有数字。则进上去,例如5.2152保留两位小数为5.22,5.2252保留两位小数为5.23,5.22500001保留两位小数为5.23,5.225保留两位小数是5.22.
从统计学的角度,“奇进偶舍”比“四舍五入”要科学,在大量运算时,它使舍入后的结果误差的均值趋于零,而不是像四舍五入那样逢五就入,导致结果偏向大数,使得误差产生积累进而产生系统误差,“奇进偶舍”使测量结果受到舍入误差的影响降到最低。
字符串是python中最常用的数据类型,我们可以使用引号('或")来创建字符串.
创建字符串只要为变量分配一个值即可.
python不支持单字符类型,单字符在python中也是作为一个字符串使用.
python访问字符串,可以使用方括号来截取字符串.
var1='Hello World!'
var2="Runoob"
print("var1[0]:",var1[0])
print("var2[1:5]:",var2[1:5])
var1[0]:H
var2[1:5]:unoo
var1='Hello World!'
print("已更新字符串:",var1[:6]+'Runoob!')
已更新字符串:Hello Runoob!
\(在行尾时):续行符
\\:反斜杠符号
\':单引号
\":双引号
\a:响铃
\b:退格(Backspace)
\e:转义
\000:空
\n:换行
\v:纵向制表符
\t:横向制表符
\r:回车
\f:换页
\oyy:八进制数
\xyy:十六进制数
\other:其他的字符以普通格式输出
下表实例变量a值为字符串'Hello',b变量值为'Python':
+:字符串连接
*:重复输出字符串
[]:通过索引获取字符串中字符
[:]:截取字符串中的一部分,遵循左闭右开原则
in:成员运算符
not in:成员运算符
r/R:原始字符串
%:格式字符串
a="Hello"
b="Python"
print("a+b输出结果:",a+b)
print("a*2输出结果:",a*2)
print("a[1]输出结果:",a[1])
print("a[1:4]输出结果:",a[1:4])
if("H"in a):
print("H在变量a中")
else:
print("H不在变量a中")
if("M"not in a):
print("M不在变量a中")
else:
print("M在变量a中")
print(r'\n')
print(R'\n')
a+b输出结果:HelloPython
a*2输出结果:HelloHello
a[1]输出结果:e
a[1:4]输出结果:ell
H在变量a中
M不在变量a中
\n
\n
python支持格式化字符串的输出.尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符%s的字符串中.
在python中,字符串格式化使用与C中sprintf函数一样的语法.
%
print("我叫%s今年%d岁!"%('小明',10))
我叫小明今年10岁!
%c:格式化字符及其ASCII码
%s:格式化字符串(最常用)
%d:格式化整数
%u:格式化无符号整型
%o:格式化无符号八进制数
%x:格式化无符号十六进制数
%X:格式化无符号十六进制数(大写)
%f:格式化浮点数字,可指定小数点后的精度
%e:用科学计数法格式化浮点数
%E:作用同E(大写)
%g:%f和%e的简写
%G:%f和%E的简写
%p:用十六进制数格式化变量的地址
*:定义宽度或者小数点精度
-:用作左对齐
+:在正数面前显示加号(+)
<sp>:在正数面前显示空格
#:在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的'x'还是'X')
0:显示数字前天填充'0'而不是默认的空格
%:'%%'输出一个单一的%
(var):映射变量(字典参数)
m.n:m是显示的最小总宽度,n是小数点后的位数(如果可用的话)
.n:在浮点型数据类型下,可以保留浮点型小数点的小数位数(精度)
python三姨好允许一个字符串跨多行,字符串中可以包含换行符,知白富以及其他特殊字符.
三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。
一个典型的用例是,当你需要一块HTML或者SQL时,这时用字符串组合,特殊字符串转义将会非常的繁琐。
errHTML='''
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
'''
cursor.execute('''
CREATE TABLE users(
login VARCHAR(8),
uid INTEGER,
prid INTEGER)
''')
para_str="""这是一个多行字符串的实例
多行字符串可以使用制表符
TAB(\t)。
也可以使用换行符[\n]。
"""
print(para_str)
这是一个多行字符串的实例
多行字符串可以使用制表符
TAB()。
也可以使用换行符[
]。
在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀u。
在Python3中,所有的字符串都是Unicode字符串。
capitalize():将字符串的第一个字符转换为大写
center(width,fillchar):返回一个指定的宽度width居中的字符串,fillchar为填充的字符,默认为空格.
count(str,beg=0,end=len(string)):返回str在string里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数.
bytes.decode(encoding='utf-8',errors='strict'):python3中没有decode方法,但我们可以使用bytes对象的decode()方法来解码个定的bytes对象,这个bytes对象可以由str.encode()来编码返回.
encode(encoding='UTF-8',errors='strict'):以encoding指定的编码格式编码字符串,如果出错默认报一个ValueError的异常,除非errors指定的是'ignore'或者'replace'.
endswith(suffix,beg=0,end=len(string)):检查字符串是否以obj结束,如果beg或者end指定则检查指定范围内是否已obj结束,如果是,返回True,否则返回False.
expandtabs(tabsize=8):把字符串string中的tab符号转为空格,tab符号默认的空格数是8.
find(str,beg=0,end=len(string)):检测str是否包含在字符串中,如果指定范围beg和end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1.
index(str,beg=0,end=len(string)):和find()方法一样,只不过如果str不在字符串中会报一个异常.
isalnum():如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False.
isalpha():如果字符串至少有一个字符并且所有字符都是字母则返回True,否则返回False.
isdigit():如果字符串只包含数字则返回True,否则返回False.
islower():如果字符串中只包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回True,否则返回False.
isnumeric():如果字符串中只包含数字字符,则返回True,否则返回False
isspace():如果字符串中只包含空白,则返回True,否则返回False
istitle():如果字符串是标题华的(见title()),则返回True,否则返回False.
isupper():如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True,否则返回False.
join(seq):以指定字符串作为分隔符,将seq中所有的元素(的字符串表示)合并为一个新的字符串.
len(string):返回字符串长度
ljust(width[,fillchar]):返回一个原字符串左对齐,并使用fillchar填充至长度width的新字符串,fillchar默认为空格.
lower():转换字符中所有大写字符为小写
lstrip():截掉字符串左边的空格或指定字符.
maketrans():创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转化的字符,第二个参数也是字符串表示转化的目标.
max(str):返回字符串str中最大的字母.
min(str):返回字符串str中最小的字母.
replace(old,new[,max]):将字符串中的str1替换成str2,如果max指定,则替换不超过max次.
rfind(str,beg=0,end=len(string)):类似于find()函数,不过是从右边开始查找.
rindex(str,beg=0,end=len(string)):类似于index(),不过是从右边开始.
rjust(width,[,fillchar]):返回一个源字符串右对齐,并使用fillchar(默认空格)填充至长度width的新字符串.
rstrip():删除字符串末尾的空格.
split(str="",num=string.count(str)):num=string.count(str))以str为分隔符截取字符串,如果num有指定值,则仅截取num个子字符串
splitlines([keepends]):按照('\r','\r\n','\n')分隔,返回一个包含各行作为元素的列表,如果参数keepends为False,不好喊换行符,如果为True,则保留换行符.
startswith(str,beg=0,end=len(string)):检查字符串是否已obj开头,是则返回True,否则返回False.如果beg和end指定值,则在指定范围内检查.
strip([chars]):在字符串上执行lstrip()和rstrip().
swapcase():将字符串中大写转换为小写,小写转换为大写.
title():返回"标题华'的字符串,就是苏活所有单词都是以大写开始,其余字母均为小写(见istitle()).
translate(table,deletechars=""):根据str给出的表(包含256个字符)准换string的字符,要过滤掉的字符放到deletechars参数中.
upper():转换字符串中的小写字母为大写.
zfill(width):返回长度为width的字符串,原字符串右对齐,前面填充0.
isdecimal():检查字符串是否值包含十进制字符,如果是返回True,否则返回False.
字符串的分割还有partition()这种方式。
partition(sep)-->(head,sep,tail)
从左向右遇到分隔符把字符串分割成两部分,返回头、分割符、尾三部分的三元组。如果没有找到分割符,就返回头、尾两个空元素的三元组。
s1="I'm a good sutdent."
#以'good'为分割符,返回头、分割符、尾三部分。
s2=s1.partition('good')
#没有找到分割符'abc',返回头、尾两个空元素的元组。
s3=s1.partition('abc')
print(s1)
print(s2)
print(s3)
结果如下:
I'm a good sutdent.
("I'm a",'good','sutdent.')
("I'm a good sutdent.",'','')