Fork me on GitHub

Other articles

  1. Function Programming in Python: 1. (Avoiding) Flow Control

    0. whatever


    “Function Programming in Python” Chapter 1:避免流控制

    在传统的imperative式编程中,一段代码通常包括一些循环(whilefor)、变量的声明和数据的修改(dict,list,set等)、分支语句(if/elif/else/, try/except/finally)。所有这些看起来都很自然,很好理解。这些状态变量和可修改的数据结构通常从现实世界中抽象而来,但是它们会带来一些副作用,随意给定程序的一个断点,我们很难靠人脑快速精确地推断出这些数据里面的值,所以我们经常需要依靠编译器的帮助来查看这些数据里面的值是不是我们想要的那样。

    一个解决方案是使我们的代码专注于描述数据是什么(what),而不是如何构建数据(how).

    1. Encapsulation (封装)


    最先想到的专注于“what”而不是“how”的方法就是:重构代码,把数据构建的操作放在一个独立的地方。考虑改写如下代码:

    # configure the data ...
    read more
  2. 离散优化之Knapsack问题(二):relaxation, branch and bound

    knapsack问题之relaxation, branch and bound

    转载请注明出处:BackNode 我们接着上回(传送门:动态规划)继续分析knapsack问题。

    问题描述

    你有一个负重量为capacity的背包,摆在你面前的是一堆宝物,宝物有重量weight和价值value,你要在你的背包中装下宝物将它们占为己有,因此你希望背包中的宝物负重量不超过capacity,同时背包中的宝物的价值value尽可能的大。 输入:

    4 11 
    8 4
    10 5
    15 8
    4 3
    

    第一行4 11表示宝物数量item_count为4,背包负重量capacity为11 接下来为item_count行,每行第一个元素是该宝物的价值value ...

    read more
  3. 离散优化之Knapsack问题(一):动态规划

    knapsack问题之动态规划

    问题描述

    你有一个负重量为capacity的背包,摆在你面前的是一堆宝物,宝物有重量weight和价值value,你要在你的背包中装下宝物将它们占为己有,因此你希望背包中的宝物负重量不超过capacity,同时背包中的宝物的价值value尽可能的大。 输入:

    4 11 
    8 4
    10 5
    15 8
    4 3
    

    第一行4 11表示宝物数量item_count为4,背包负重量capacity为11 接下来为item_count行,每行第一个元素是该宝物的价值value,第二个元素是该宝物的重量weight

    问题建模

    数学模型

    x[i]=1表示选中宝物i,x ...

    read more
  4. python学习--locals globals

    python学习--locals globals

    locals() and globals()

    locals()globals()是python的两个内置函数,它们提供了基于dictionary的访问局部和全局变量的方式。 locals()返回一个名字/值对的dictionary。这个dictionary的键字是字符串形式的变量名字,diction的值是变量的实际值。

    In [12]: def func(arg):
        ...:     num = 90
        ...:     print locals()
        ...:     print locals()['arg']
        ...:     
    
    In [13]: func('hello')
    {'num': 90, 'arg': 'hello'}
    hello
    

    globals()函数则返回包含全局变量的dictionary,在下例中,operation()函数根据oper变量的值自动调用相应的全局函数:

    In [3]: def plus(a,b):
       ...:     return ...
    read more
  5. python学习--itertools模块

    python学习:itertools

    itertools模块包含一系列迭代数据集的函数,如下三个表格:

    iterators

    下面挑常用的举例学习一下:

    itertools.count(start=0,step=1)和itertools.izip(*iterables)

    count()函数生成从start(default=0)开始的以step(default=1)为步长的连续整数, izip()函数将多个迭代器中的元素合并为一个元组并作为一个迭代器返回,类似于zip()函数 使用:

    In [1]: from itertools import *
    
    In [2]: for i in izip(count(7,2),['a','b','c']):
       ...:     print i 
       ...:     
    (7, 'a')
    (9, 'b ...
    read more
  6. 初学Python----urllib2模块与正则表达式组合而成的小爬虫

    最近开始学Python,在http://www.the5fire.com/python-sohuspider-software-people.html这个博客上看到作者写的简单的从搜狐上爬小说的爬虫,正好学习学习练练手,发现代码是几年前的,而搜狐网早已经更新了网页,原代码已经不能用了,正好我来改改。下面是改过之后的代码,亲测有效:

    #!/usr/bin/python
    
    import re
    import urllib2
    import sys
    
    def getPage(url,offset = '3399'):
        realurl = "%s%s%s" % (url,offset,".html")
        print realurl
        content = urllib2.urlopen(realurl).read()
    
        content_re = re.compile(r'<div class="chapter"></div ...
    read more
  7. pythonChallenge攻略

    http://www.pythonchallenge.com/是一个非常棒的练习python的网站,以过关解密的形式来帮助你学习python,现将我的解密过程记录如下。

    第0关:warming up

    这关就一张图片,显示2的38次方,下方提示:try to change the URL address OK,那我们就计算一下2的38次方,在python中输入:

    2**38
    

    在python中两个*号表示次方运算,得出答案:

    >>> 2**38
    274877906944L
    

    根据提示修改url,将0替换成上面这串数字,然后网页提示L不需要,我们去掉L再替换, 过关!

    第1关:what about making trans

    图中显示将字母k换成m,o换成q,e换成g,即每个字母往后推移两位,看来得将下面那一 大段字符转换一下,这里使用两个函数chr(),和ord().

    string = "g ...
    read more

Page 1 / 1

blogroll

social