课程内容及目标:
- 学习循环计算并将它们抽象化,即学习函数内的计算方法,允许我们将计算细节和计算的使用区分开来,也叫作黑盒抽象
- 引进环境的形式,帮助我们进行可视化处理,观察如何使用python解释器的函数将名字分配给相应数值,如歌检索数值
- 将有能力将任意计算转化为函数,将函数作为其他计算的组成部件
1.函数:
基本格式:
def <function name> (<formal parameters>):
<function body>
2.环境:
是一套形式体系,用于追踪变量和数值间的绑定关系。事实上,它不仅仅适用于赋值语句的常规绑定,还可以更广泛地应用到函数调用中
3.求x的p次幂
x = float(raw_input('Enter a number:'))
p = int(raw_input('Enter an integer power:'))
def iterativePower(x, p):
result = 1
for turn in range(p):
print('iteration:'+str(turn)+ 'current result:'+str(result))
result = result * x
return result
4.求一个数的平方根:
def findRoot1(x, power, epsilon):
low = 0 #此处有隐患,以x=-25为例,low=0,high=-25,ans=-12,power设为2,那么-12**2<-25,那么让low=-12。但-25的
high = x #平方根为-5,应该在0~-12之间取,产生了错误,原因是low应该小于high但在这里却low>high
ans = (high + low)/2.0
while abs(ans**power-x)>=epsilon:
if ans**power<x:
low = ans
else:
high = ans
ans = (high + low)/2.0
return ans
让我们输入findRoot1(-25, 2, 0.001),发现出错
改进:
def findRoot2(x, power, epsilon):
if x<0 and power%2==0:
return None
#can't find even powered root of negative number
low = min(0,x)
high = max(0,x)
ans = (high+low)/2.0
while abs(ans**power-x)>=epsilon:
if ans**power<x:
low = ans
else:
high = ans
ans = (high+low)/2.0
return ans
让我们输入findRoot2(0.25, 2, 0.001),发现再次出错,原因是0.25的平方根为0.5,二分法第一次ans的值为0.125,然而答案不再0-0.25之间,而在0.25之外。再次进行修改
def findRoot3(x, power, epsilon):
if x<0 and power%2==0:
return None
#can't find even powered root of negative number
low = min(-1,x)
high = max(1,x)
ans = (high+low)/2.0
while abs(ans**power-x)>=epsilon:
if ans**power<x:
low = ans
else:
high = ans
ans = (high+low)/2.0
return ans
5.关于文件导入:
import circle
pi = 3.0
print pi
print circle.pi
print circle.area(3)
print circle.circumference(3)
上述程序通过“文件名.”方式来引用文件中的变量和方法,并未全部导入
from circle import *
pi = 0.0
print pi
print area(3)
print circumference(3)
而这段代码的第一行将文件中所有的变量引入,可以在不定义变量的时候直接得到文件中变量的值
6.一些方法:
str.upper():将字符串中的小写字母转为大写字母
str.isupper():检测字符串中所有的字是否都为大写
str.islower():检测字符串中所有的字是否都为小写
str.capitalize():将字符串的第一个字母变成大写,其他字母变小写
str.swapcase():对字符串的大小写字母进行转换
str.find():str指定检索的字符串;beg开始索引,默认为0;end结束索引,默认为字符串长度。用于检测字符串中是否包含字符串。如果str不在string中返回-1
str.index(str, beg=0, end=len(string)):str指定检索的字符串;beg开始索引,默认为0;end结束索引,默认为字符串长度。用于检测字符串中是否包含字符串。和find()方法一样,但如果str不再string 中会报异常
str.count(str,start=0,end=len(string)):用于统计字符串里某个字符出现的次数,str搜索的字符串;start字符串开始搜索的位置,默认为第一个字符;end字符串结束搜索的位置,默认为字符串的最后一个位置
str.replace(str1,str2):把字符串中old(旧字符串)替换成new(新字符串),如果指定第三个参数max,则替换不超过max次