python编程导论 week 2

第三章

一些简单的数值程序

  • 穷举法
#寻找完全立方数的立方根
x = int(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)

实际练习:假设s是包含多个小数的字符串,由逗号隔开,如s = '1.23, 2.4, 3.123'。编写一个程序,输出s中所有数值的和

  • 近似解和二分查找

  • 牛顿拉弗森法
    在基于二分求解法求解多项式时,通过牛顿拉弗森的数学推论,对解x的范围做了更精确的数学估值

#利用牛顿拉弗森法寻找平方根
#寻找x,满足x**2-24在epsilon和0之间
epsilon = 0.01
k = 24.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)

额外介绍

  • for循环和range
range(2,10,2)
# 2,4,6,8
  • 浮点数
    由于计算机内部是用二进制表示数值,所以当表示小数时
    表示0.375,0.3752*3 = 3 = 11(2),表示0.375时,二进制11向左移3位:0.011
    表示0.1,由于0.1无法乘以2的n次幂恰好为一个整数,所以只能无限接近

因此,判断两个浮点数是否相等不能用==,应当用abs(float_a)-abs(float_b)<epsilon

第四章 函数、作用域、抽象

前三章介绍的Python的功能:数值、赋值语句、输入/输出、比较语句和循环结构,已满足图灵完备,即实现这些功能的语言理论上可以写出任何算法。然而,一门语言需要更强大的通用性

  • 函数定义
#关键字 def、return
def maxVal(x, y):
  if x > y:
    return x
  else:
    return y
  • 作用域/命名空间
    每个函数内部都是一个命名空间,即作用域
    执行到该函数时,就会创建作用域,绑定对象的变量名为局部变量,挂在该作用域下
    作用域栈帧的后进先出

  • 函数的三引号
    记录函数思路,方便维护
    双引号\单引号都可,在def下后一行

# 求一个数n次幂的函数思考

def findRoot1(x, power, epsilon):
"""
x和epsilon是整数或者浮点数, power是整数
epsilon>0 且power>= 1
如果y**power和x的差小于epsilon,就返回浮点数y,
否则返回None
"""
    low = 0
    high = 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

##print findRoot1(25.0, 2, .001)
##print findRoot1(27.0, 3, .001)
##print findRoot1(-27.0, 3, .001)


# so can't find cube root of negative number
#在2的基础上考虑了x=[-1,1]的情况
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

##print findRoot2(25.0, 2, .001)
##print findRoot2(27.0, 3, .001)
##print findRoot2(-27.0, 3, .001)
##
##print findRoot2(0.25, 2, .001)
##print findRoot2(-0.125, 3, .001)
#在2的基础上考虑了x=[-1,1]的情况
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.0, x)
    high = max(1.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

print findRoot3(25.0, 2, .001)
print findRoot3(27.0, 3, .001)
print findRoot3(-27.0, 3, .001)

print findRoot3(0.25, 2, .001)
print findRoot3(-0.125, 3, .001)

def testFindRoot():
    epsilon = 0.0001
    for x in (0.25, -0.25, 2, -2, 8, -8):
        for power in range(1,4):
            print('Testing x = ' + str(x) +\
                  ' and power = ' + str(power))
            res = findRoot3(x, power, epsilon)
            if res == None:
                print('    No root')
            else:
                print('    ' + str(res**power) + ' ~= ' + str(x))

递归

#阶乘的迭代实现
def factI(n):
"""假设n是正整数
返回n!"""
  result = 1
  while n > 1:
    result = res
    n -= 1
  return result

def factR(n):
"""假设n是正整数 
返回n!"""
  if n==1:
    return n
  else:
    return n*factR(n-1)

斐波那契数列

def fib(n):
"""假定n是正整数
返回第n个斐波那契数"""
  if n == 0 or n == 1:
    return 1
  else:
    return fib(n-1) + fib(n-2)

如果使用函数fib计算fib(5),那么需要计算多少次fib(2)的值:

5 分为 4和3,
5->4分为3,2,5->3分为2,1,
5->4->3分为2,1
共3次

视频中的错题总结

1、寻找‘djadfhbobobkafsjhf’字符串中的'bob'出现次数,如左边字符串中出现了2次

#利用字符串前片
num = 0
for i in range(len(s)-2):
    num += s[i:i+3].count('bob')
print 'Number of times bob occurs is: %s' % num

2、返回字符串中最长的且按照字母表顺序排序的子字符串

letter = ans = ''
for i in range(len(s)):
    if i <len(s)-1 and s[i] <= s[i+1]:
        letter += s[i]
    else:
        letter += s[i]
        if len(letter) > len(ans):
            ans = letter
        letter = ''

print(ans)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,149评论 0 13
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,957评论 17 410
  • Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def...
    伊森H阅读 3,065评论 0 15
  • 上联:吕校呕心立育人理念 下联:寿春展翅书折桂华章 横批:桃李满天下 没想到学了几天的对对子,在这里用上了,居然能...
    艳阳天99aa阅读 222评论 0 1
  • 先打开一个箱子 在进入“剽悍行动营”之前,我自己都记不清,其实也不愿意再去回想2017年自己到底经历了些什么,唯一...
    苏丛斌阅读 901评论 16 15