《编程导论》 CH2 Python介绍
2.1 Python的基本元素
1.标量对象
int float bool None
2.操作符
i+j
i-j
i*j
i//j #整数除法
i/j #两个操作数都是int类型时返回整数,否则返回浮点数
i%j
i**j #i的j次方
== ,!= ,> ,>= ,< ,<=
bool类型支持:and or not
3.变量和赋值
#从圆c的面积中减去正方形s的面积
areaC=pi*radius**2
areaS=side*side
difference= areaC-areaS
多重赋值:
x,y=2,3
x,y=y,x
print 'x=',x
print 'y=',y
if x%2 == 0:
if x%3 == 0:
print 'Divisible by 2 and 3'
else:
print 'Divisible by 2 and not by 3'
elif x%3 ==0:
print 'Divisible by 3 and not by 2'
1.len() 获取字符串的长度 len('abc')=3
2.下标: 'abc'[0]='a' 'abc'[-1]='c' #索引从0开始,负数从字符串结尾开始索引
3.切片:s[start:end] 表示s中从下标start开始到下标end-1截至的一个子字符串。
‘abc'[1:3]='bc'
'abc'[0:len('abc')]='abc'='abc'[:] 冒号前省略默认0;冒号后省略默认字符串长度
4.输入:
input raw_input raw_input把输入当作一个字符串并作为函数返回值;input将输入当作表达式并推测类型
name=raw_input("Enter your name: ")
print "Are you really",name,"?"
print "Are you really "+name+"?"
#计算整数平方根的复杂方法
x=3
ans=0
itersLeft=x
while(itersLeft != 0):
ans = ans + x
itersLeft = itersLeft - 1
print str(x) + '*'+str(x)+'='+str(ans)
3.1 穷举法
#寻找完全立方数的立方根
x = int(raw_input('Enter an integer: '))
ans = 0
while ans**3 < abs(x):
ans=ans+1
if ans**3 != abs(x):
print x,"is not a perfect cube"
else:
if x<0:
ans=-ans
print 'Cube root of',x,'is',ans
1.range函数: 用来生成一系列需要绑定给变量的值,这些值是一个数列
三个整数参数:start,stop,step 若step为正,序列中最后一个元素是满足start+i*step且小于stop的最大整数;若step为负,序列中最后一个元素是满足start+i*step且大于stop的最小整数
若省略第一个参数,默认为0;省略最后一个参数,默认为1
range(5,40,10)->[5,15,25,35]
range(40,5,-10)->[40,30,20,10]
range(0,3)=range(3) ->[0,1,2]
调用range时会生成整个序列,消耗内存,使用xrange可避免此问题,在for循环中使用xrange时每次只会生成一个值。
x=int(raw_input('Enter an integer: '))
for ans in range(0,abs(x)+1):
if ans**3>=abs(x):
break
if ans**3 != abs(x):
print x,'is not a perfect cube'
else:
if x<0:
ans = -ans
print 'Cube root of',x,'is',ans
#使用穷举法来寻找近似平方根
x=25
epsilon=0.01
step=epsilon**2
numGuesses = 0
ans=0.0
while abs(ans**2-x)>=epsilon and ans<=x:
ans+=step
numGuesses+=1
print 'numGuesses =',numGuesses
if abs(ans**2-x)>=epsilon:
print 'Failed',x
else:
print ans,'is close to square root of',x
#使用二分查找寻找近似平方根
x=25
epsilon=0.01
numGuesses=0
low=0.0
high=max(1.0,x)
ans=(high+low)/2.0
while abs(ans**2-x)>=epsilon:
print 'low=',low,'high=',high,'ans=',ans
numGuesses += 1
if ans**2
x=0.0
for i in range(10):
x=x+0.1
if x==1.0:
print x,'=1.0'
else:
print x,'is not 1.0'
显示地舍入一个浮点数,可以使用round函数:round(x,numDigits)返回把x近似到小数点后第numDigits位数字的结果。
比较两个浮点数的值最好不要使用==, 可以使用abs(x-y)<0.0001 判断两个浮点值是否足够接近
3.5 牛顿-拉夫逊方法
如果一个值guess是一个多项式的近似根,那么guess-p(guess)/p'(guess)是一个更好的近似
#使用牛顿-拉夫逊方法寻找平方根
#寻找x,满足x**2-25在epsilon和0之间
epsilon=0.01
k=25.0
guess=k/2.0
while abs(guess*guess-k)>=epsilon:
guess=guess-(((guess**2)-k)/(2*guess))
print 'Square root of',k,'is about',guess