python 学习简记《编程导论》CH2&CH3

《编程导论》 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

2.2 分支程序

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'

2.3 字符串和输出

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+"?"

2.4 循环

#计算整数平方根的复杂方法
x=3
ans=0
itersLeft=x
while(itersLeft != 0):
    ans = ans + x
    itersLeft = itersLeft - 1
print str(x) + '*'+str(x)+'='+str(ans)

CH3 一些简单的数值类程序

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

3.2 for循环

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

3.3 近似解和二分查找

#使用穷举法来寻找近似平方根
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

3.4关于浮点数

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'

输出:1.0 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



你可能感兴趣的:(python 学习简记《编程导论》CH2&CH3)