页面载入中...
首页 » 2016年12月

如何快速下载“过期”的电驴资源?

电驴是什么,想必不需要舍得做过多的介绍了吧?

网上有很多比较稀缺的资源,是由电驴提供的。但由于电驴本身的特性,有些资源往往会连接很久也没有合适的源,这便是舍得所说的过期。

如何快速下载到这些“过期”的资源呢?

舍得最近用的一个比较高效的方法是,用百度云做跳板。这一招应该也有一些朋友早已在使用,但舍得相信,肯定还有一些对此不了解的朋友。so,这篇文章便是为他们写的。

打开百度云管家——竭诚推荐舍得提供的不限速版:【十二月福利】百度云管家5.3.6不限速版

然后点击“离线下载”按钮:

SNAG-0007

将电脑链接粘贴进去:

SNAG-0006

再点击“开始下载”就可以了。

SNAG-0005

“离线下载任务列表”窗口会自动弹出,下载完成的话,任务后面自然会被标上“下载成功”的字样。然后,你便可以用云管家从自己的网盘中下载这份资源了。这个时候,下载的速度就是由客户端来决定了。使用不限速的版本下载一些大文件的时候,百兆光纤环境下达到2-3MB/s很正常。

当然,下载电驴资源的方法并非这一种。你也可以用其它的客户端,比如emule,比如迅雷。但这些客户端对一些过期资源并没有太好的方法,挂在那里一两天都下载不到东西也是常有的事。尤其是迅雷,部分电驴资源发布的时候便会封掉迅雷的客户端连接。

使用迅雷的离线下载或许能突破电驴的封杀,下载的速度也会有一定的保障。但前提是,你得花钱购买迅雷的会员。如果你平时下载的东西不多,舍得觉得没有必要给迅雷上供,尽管每月几十块钱也不多。

当然,使用百度云作跳板的方法并不是百试百灵。但大部分冷门资源都可以通过它下载,推荐大家尝试。

使用过程中,还需要注意一件事。有些电驴链接粘贴到云管家时,会出现“链接格式有误”的提示:

SNAG-0008

肿么办捏?
通常这个时候,我们要对电驴链接作一下URL解码处理。

在百度中输入“url编码”,随意找一个“URL转码”的网站,比如这个:

url转码 – 在线编码转换

将电驴链接贴到右边辣个框框中:

SNAG-0009

然后点击“URL解码”按钮,再将左边框框中解码出来的链接复制并粘贴到云管家里——你便可以搞定收工了。

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

《HeadFirst Python》第二章学习笔记

现在,请跟着舍得的脚步,打开《HeadFirst Python》第二章。

一章的内容其实没有多少,多练习几次就能掌握一个大概了!

《HeadFirst Python》的第二章设计得很有意思。它直接从制作一个模块入手,顺带讲了模块的导入,传统的书可不会这么搞。

不过书中关于编辑器的观点略显陈旧。

最好的编辑器是什么? 别用书中推荐的Python自带IDLE,在现阶段,请使用Jupyter Notebook来进行各项练习。

等学完这本书后,你可以选择PyCharm/Eric6/WingIDE进行Python的开发,舍得将会带你开启那个新的篇章。

Jupyter Notebook是个堪称神器级别的工具,舍得现在开发的过程中,还经常用它来验证一些构思中的代码,尤其在学习一些新模块的时候更是如此。

上课。
[in]:

    # 注释代码
    # 第2章 p37
    # 单行注释推荐使用注释内容前面加"# "号的方式;
    # 多行注释请使用一组三重引号,如:
    """
    你要对当前代码进行注释/说明的内容
    """

[in]:

    # 打开记事本类程序(推荐使用emeditor), 将下面的内容复制进去;
    # 然后另存为nester.py, 文件编码请使用utf-8;
    # 新建一个nester文件夹,将nester.py放进该文件夹;
    """
    这是"nester.py"模块,提供了一个名为print_lol()的函数.
    此函数的作用是打印列表.
    """
    def print_lol(the_list): 
        """
        此函数取一个位置参数,名为the_list,它可以是任何形式的列表.
        所指定的列表中的每个数据项会(递归地)输出到屏幕上,每个数据项各占一行.
        """
        for i in the_list:
            if isinstance(i, list):
                print_lol(i)  # 如果是列表, 那么调用"自己"再次处理这个列表
            else:
                print(i)

[in]:

    # 准备发布
    # 第2章 p40
    # 将下面的代码复制到emeditor中;
    # 文件另存为setup.py, 文件编码请使用utf-8;
    # 将该文件存放到nester文件夹下
    # 单引号内的内容可以随意发挥, 注意观察文件的格式,尤其是=/,/()/[]和单引号的使用
    # 注意下面的代码不要在Jupyter中运行
    from distutils.core import setup
   
    setup(
        name = ‘nester’,
        version = ‘1.0.0’,
        py_modules = [‘nester’],
        author = ‘hfpython’,
        author_email = ‘xxx@xxx.com’,
        url = ‘
http://www.emagic.org.cn’,
        description = ‘A simple printer of nested lists’,  
    )

[in]:

    # 构建发布/导入模块
    # 第2章 p41
    # 在nester文件夹下打开Dos命令提示符
    # 不知道如何操作的童鞋, 可以参考我写的《Python起步》,或自行百度
    # 在Dos命令提示符下输入: python setup.py sdist
    # 生成dist文件夹后, 继续在Dos命令提示符下输入: python setup.py install
    # 如果你电脑中装有everything的话,可以快速搜索一下nester.py,
    # 便可以发现c:\python34\site-packages有了这个文件,这表示模块已经安装成功了
    # 用import命令来导入它:
    import nester

[in]:

    # 使用模块/命名空间
    # 第2章 p45
    # 导入后,要在print_lol前加上"nester.",才能使用模块中的这一函数
    # 所谓命名空间就是用来告诉程序,你所使用的这个函数是从哪来的
    cast = [‘Palin’, ‘Cleese’, ‘Idle’, ‘Jones’, ‘Gilliam’, ‘Chapman’]
    nester.print_lol(cast)  # 如果导入时用"from nester import print_lol",
    # 前面就不用(也不能)加"nester."

[out]:

    Palin
    Cleese
    Idle
    Jones
    Gilliam
    Chapman
   

[in]:

    # 内置函数
    # 第2章 p54
    # range: 生成从0直到(但不包含某个数)的数字列表.开发过程中会经常用到.看实例来体会吧
    # 你可以自己脑洞一下range的用法, 比如,把4换成"len(cast)"
    for num in range(4):
        print(num)

[out]:

    0
    1
    2
    3
   

[in]:

    # 改进nester模块
    # 第2章 p56
    # 修改print_lol函数,记得按Alt+Enter运行
    """
    这是"nester.py"模块,提供了一个名为print_lol()的函数.
    此函数的作用是打印列表.
    """
    def print_lol(the_list, level): 
        """
        此函数取一个位置参数,名为the_list,它可以是任何形式的列表.
        所指定的列表中的每个数据项会(递归地)输出到屏幕上,每个数据项各占一行.
        第2个参数用来在遇到嵌套列表时插入制表符.
        """
        for i in the_list:
            if isinstance(i, list):
                print_lol(i)  # 如果是列表, 那么调用"自己"再次处理这个列表
            else:
                for tab_stop in range(level):
                    print("\t", end=”)
                print(i)

[in]:

    # 用新的print_lol来打开movies列表
    # 要传入一个新的参数,我们用0试试
    movies = ["The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91,
              ["Graham Chapman", ["Michael Palin", "John Clseese",
                                "Terry Gilliam", "Eric Idle", "Terry Jones"]]]
    print_lol(movies, 0)

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
   

::

    —————————————————————————

    TypeError                                 Traceback (most recent call last)

    <ipython-input-22-c989b21ce795> in <module>()
          3           ["Graham Chapman", ["Michael Palin", "John Clseese",
          4                             "Terry Gilliam", "Eric Idle", "Terry Jones"]]]
    —-> 5 print_lol(movies, 0)
   

    <ipython-input-21-e6f44022d658> in print_lol(the_list, level)
         14     for i in the_list:
         15         if isinstance(i, list):
    —> 16             print_lol(i)  # 如果是列表, 那么调用"自己"再次处理这个列表
         17         else:
         18             for tab_stop in range(level):
   

    TypeError: print_lol() missing 1 required positional argument: ‘level’

[in]:

    # 跟踪代码
    # 第2章 p58
    # 看到上面的出错信息,不要紧张,一行行看反馈的信息
    # 注意这句:"print_lol() missing 1 required positional argument: ‘level’"
    # 注意它标出的第16行,问题应该出在这一句.
    # 在函数内部调用自己的时候, 少传了一个level参数
    # 继续来修改
    """
    这是"nester.py"模块,提供了一个名为print_lol()的函数.
    此函数的作用是打印列表.
    """
    def print_lol(the_list, level): 
        """
        此函数取一个位置参数,名为the_list,它可以是任何形式的列表.
        所指定的列表中的每个数据项会(递归地)输出到屏幕上,每个数据项各占一行.
        第2个参数用来在遇到嵌套列表时插入制表符.
        """
        for i in the_list:
            if isinstance(i, list):
                print_lol(i, level)  # 加上level参数
            else:
                for tab_stop in range(level):
                    print("\t", end=”)
                print(i)

[in]:

    # 再来运行一次, 这回能打印了
    print_lol(movies, 0)

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
    Graham Chapman
    Michael Palin
    John Clseese
    Terry Gilliam
    Eric Idle
    Terry Jones
   

[in]:

    # 但问题来了, 看起来level传进去没啥卵用!
    # 我们加这个level参数是希望它每次处理嵌套列表时,打印时行前能多缩进一个制表符的位置
    # 所以需要将level值加1
    # 再来修改
    """
    这是"nester.py"模块,提供了一个名为print_lol()的函数.
    此函数的作用是打印列表.
    """
    def print_lol(the_list, level): 
        """
        此函数取一个位置参数,名为the_list,它可以是任何形式的列表.
        所指定的列表中的每个数据项会(递归地)输出到屏幕上,每个数据项各占一行.
        第2个参数用来在遇到嵌套列表时插入制表符.
        """
        for i in the_list:
            if isinstance(i, list):
                print_lol(i, level + 1)  # 每次让level值加1
            else:
                for tab_stop in range(level):
                    print("\t", end=”)
                print(i)

[in]:

    # 再运行一次,看下效果
    print_lol(movies, 0)

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
        Graham Chapman
            Michael Palin
            John Clseese
            Terry Gilliam
            Eric Idle
            Terry Jones
   

[in]:

    # 更新模块
    # 第2章 p60
    # pypi的部分,看看就可以了.兴趣极其强烈的可以按照书上提示去玩一玩
    # 用新版本的print_lol函数替换掉原来nesster.py中的内容;
    # 然后修改setup.py, 将version(版本)这一行改为1.1.0
    # 你也可以重新构建并安装该模块(参看前面的内容), 但别忙着做,先看下面的内容
    from distutils.core import setup
   
    setup(
        name = ‘nester’,
        version = ‘1.1.0’,
        py_modules = [‘nester’],
        author = ‘hfpython’,
        author_email = ‘xxx@xxx.com’,
        url = ‘
http://www.emagic.org.cn’,
        description = ‘A simple printer of nested lists’,  
    )

[in]:

    # 使用可选参数
    # 第2章 p63
    # 给第2个参数加一个缺省值, 这样可以兼容1.0.0版本的调用方式
    # 我们来继续修改nester.py文件
    # 给def print_lol后的level加了个缺省值0
    """
    这是"nester.py"模块,提供了一个名为print_lol()的函数.
    此函数的作用是打印列表.
    """
    def print_lol(the_list, level=0): 
        """
        此函数取一个位置参数,名为the_list,它可以是任何形式的列表.
        所指定的列表中的每个数据项会(递归地)输出到屏幕上,每个数据项各占一行.
        第2个参数用来在遇到嵌套列表时插入制表符.
        """
        for i in the_list:
            if isinstance(i, list):
                print_lol(i, level + 1)  # 每次让level值加1
            else:
                for tab_stop in range(level):
                    print("\t", end=”)
                print(i)
   

[in]:

    # 现在再去构建/安装这个新的nester模块
    # 然后导入,测试一下不同的调用方式
    # 先点击Jupyter中的"Kernel"菜单, 从中选择"Restart"命令
    # 这样前面导入的和执行过的命令全清空了,我们来导入nester
    import nester
    # 重新定义movies列表
    movies = ["The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91,
              ["Graham Chapman", ["Michael Palin", "John Clseese",
                                "Terry Gilliam", "Eric Idle", "Terry Jones"]]]
    # 分别以不同的方式调用print_lol函数
    nester.print_lol(movies, 0)
    print(‘——我是一条美丽的分割线——‘)  # 加个分割线来区分这三个调用方式
    nester.print_lol(movies)  # 不加level参数
    print(‘——我是一条美丽的分割线——‘)
    nester.print_lol(movies, 2)  # level指定为2, 你也可以自己指定一个负数试试!

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
        Graham Chapman
            Michael Palin
            John Clseese
            Terry Gilliam
            Eric Idle
            Terry Jones
    ——我是一条美丽的分割线——
    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
        Graham Chapman
            Michael Palin
            John Clseese
            Terry Gilliam
            Eric Idle
            Terry Jones
    ——我是一条美丽的分割线——
            The Holy Grail
            1975
            Terry Jones & Terry Gilliam
            91
                Graham Chapman
                    Michael Palin
                    John Clseese
                    Terry Gilliam
                    Eric Idle
                    Terry Jones
   

[in]:

    # 增加第三个参数
    # 第2章 p68
    # 用一个indent=True或False来控制是否启用缩进(level参数则用来控制缩进多少)
    """
    这是"nester.py"模块,提供了一个名为print_lol()的函数.
    此函数的作用是打印列表.
    """
    def print_lol(the_list, indent=False, level=0): 
        """
        此函数取一个位置参数,名为the_list,它可以是任何形式的列表.
        所指定的列表中的每个数据项会(递归地)输出到屏幕上,每个数据项各占一行.
        第2个参数用来控制是否输出制表符.
        第3个参数用来在遇到嵌套列表时插入几个制表符.
        """
        for i in the_list:
            if isinstance(i, list):
                print_lol(i, indent, level + 1)  # 此处要加上indent参数
            else:
                if indent:  # 如果传入的indent参数为True,则做以下的操作
                    for tab_stop in range(level):
                        print("\t", end=”)
                print(i)
    # 将这段代码运行一下(用Alt+Enter快捷键)

[in]:

    # 现在我们换一个新的列表来测试
    names = [‘John’, ‘Eric’, [‘Cleese’, ‘Idle’], ‘Michael’, [‘Palin’]]
    print_lol(names)  # 不带第2、3个参数

[out]:

    John
    Eric
    Cleese
    Idle
    Michael
    Palin
   

[in]:

    # 将第2个参数指定为True
    print_lol(names, True)

[out]:

    John
    Eric
        Cleese
        Idle
    Michael
        Palin
   

[in]:

    # 传入第3个参数,比如4:
    print_lol(names, True, 4)

[out]:

                    John
                    Eric
                        Cleese
                        Idle
                    Michael
                        Palin
   

以上就是《HeadFirst Python》第二章的内容,舍得建议在练习的同时,把书中的细节好好阅读一下。一些需要储存到脑子里的内容,你可以把它们整理好,加到SuperMemo中,用SuperMemo那超绝的复习算法来帮助你快速掌握所学的内容。

本章笔记下载地址:

链接:http://pan.baidu.com/s/1eRAo3n0 密码:ole9

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

《HeadFirst Python》第一章学习笔记

对于Python初学者来说,舍得强烈推荐从《HeadFirst Python》开始读起,这本书当真做到了深入浅出,HeadFirst系列,本身亦是品质的保证。这本书舍得已在《Python起步:写给零编程基础的童鞋》一文中提供了下载。为了方便大家的学习,舍得特意制作了Jupyter Notebook格式的笔记,文章末尾舍得提供了笔记的下载地址。

读《HeadFirst Python》的同时,最紧要的是及时做练习,你甚至可以在快速浏览过一章后,便拿起练习来做。

做练习的时候,切记,不要用书中建议的Python自带的IDLE。作为过来人,舍得的建议是使用Jupyter Notobook。具体的安装方法舍得已在Python起步:写给零编程基础的童鞋》中讲得很清楚了,每次你要练习的时候,运行jupyter-notebook.exe,便可以在程序打开的浏览器页面中进行代码输入了。Jupyter Notobook与Python自带的IDLE相比,有着巨大的优势:

  • 增强版的代码自动补全:输入代码过程中,可尝试按Tab键,程序会提示相应的代码;
  • 每次录入的代码程序会自动替你保存下来,这就相当于你自己的学习笔记,你可以在代码的前或后加入注释,注释前面用一个“#”+一个空格(空格可以不加,但舍得建议从一开始便养成良好的写代码习惯,#后带空格是Python代码规范-PEP8的要求)就可以了;
  • Notebook给你保存的笔记,你可以随时打开,点RUN按钮(或用Alt+Enter快捷键)便可以运行选择中的某一段代码,这是Python自带的IDLE根本无法做到的事情;
  • 在Notebook中你可以极为方便地输入多行代码,而Python自带的IDLE在这方面有极大的限制;
  • 对于颜控来说,Notebook的代码着色看起来更加舒服一些;
  • ……

舍得会将书中每一章中提到的大部分练习,收录到笔记中,你可以在看完一章后,拿舍得给你的笔记,在Jupyter Notebook中进行练习。当然你也可以在看到书出给出一段代码时,立刻在Jupyter Notobook中输入并运行。

舍得提供的笔记是ipynb格式(ipy是指ipython, Notebook是用ipython来实现的。而nb则是notebook的缩写),当你下载了笔记之后,请将其放到“你的python安装文件夹(默认是c:\python34)\Scripts”文件夹下,然后刷新一下浏览器中Jupyter Notebook的首页,便可以看到这个笔记,点击该笔记,就可以浏览了。

SNAG-0140

如果你在Jupyter Notebook首页中已经点击过“New->Python 3”, 那么你可以使用菜单”File->Open“回到首页选择舍得提供的笔记。

SNAG-0143

下面舍得开始讲解第一章的要点。

文中”[in]:“后面的内容,表示我们在Jupyter Notebook中输入的代码和注释,内容中以”# “开头的,是舍得的注释。

[out]:“后面的内容,则是代码执行后的输出结果。

舍得在注释中,标明了该段代码的页码,方便你对照书本进行练习。书中有些内容的讲解比舍得更详细。

舍得对部分代码进行了改写,但不影响代码的最终效果。

[in]:

    # 熟愁一下打印命令.
    # 第一章 p4
    # 内容前面加一个#号表示注释, python会自动忽略#号后面的内容
    if 43 > 42:
        print("Don’t panic!")

[out]:

    Don’t panic!
   

[in]:

    # 创建简单的Python列表
    # 第一章 p8
    # 标识符:movies, 你给这个列表起的名字
    # 操作符:=,把列表赋给标识符
    # 列表格式:两端用中括号;列表中每一项用逗号隔开;电影名称两边加引号;
    movies = ["The Holy Grail",
             "The Life of Brian",
             "The Meaning of Life"]
    print(movies)

[out]:

    [‘The Holy Grail’, ‘The Life of Brian’, ‘The Meaning of Life’]
   

[in]:

    # 用中括号记法访问列表
    # 第一章 p9
    # 打印列表中第2个数据(第1个为0)
    print(movies[1])

[out]:

    The Life of Brian
   

[in]:

    # 列表深入学习:len
    # 第一章 p10
    # len:获取列表长度,即列表有几个数据项
    cast = ["Cleese", ‘Plain’, ‘Jones’,"Idle"]
    print(cast)
    print(len(cast))
    print(cast[0])  # 0表示第一个数据项, 你可以自己换不同的数字尝试一下

[out]:

    [‘Cleese’, ‘Plain’, ‘Jones’, ‘Idle’]
    4
    Cleese
   

[in]:

    # 列表深入学习:append
    # 第一章 p10
    # append:在列表末尾增加一项数据
    cast.append("Gillianm")
    print(cast)

[out]:

    [‘Cleese’, ‘Plain’, ‘Jones’, ‘Idle’, ‘Gillianm’]
   

[in]:

    # 列表深入学习:pop
    # 第一章 p10
    # pop:从列表末尾删除数据
    cast.pop()

[out]:

    ‘Gillianm’

[in]:

    # 再打印一下,看看有何变化
    print(cast)

[out]:

    [‘Cleese’, ‘Plain’, ‘Jones’, ‘Idle’]
   

[in]:

    # 列表深入学习:extend
    # 第一章 p10
    # extend:在列表末尾增加一个列表(两个列表合并)
    cast.extend(["Gillianm", "Chapman"])
    print(cast)

[out]:

    [‘Cleese’, ‘Plain’, ‘Jones’, ‘Idle’, ‘Gillianm’, ‘Chapman’]
   

[in]:

    # 列表深入学习:remove
    # 第一章 p10
    # remove:在列表中找到并删除一个特定的数据项
    cast.remove("Chapman")
    print(cast)

[out]:

    [‘Cleese’, ‘Plain’, ‘Jones’, ‘Idle’, ‘Gillianm’]
   

[in]:

    # 列表深入学习:insert
    # 第一章 p10
    # insert:在列表中特定的位置前增加一个数据项
    cast.insert(0, "Chapman")  # 0表示插入在最前面,你可以试试其它的数字
    print(cast)

[out]:

    [‘Chapman’, ‘Cleese’, ‘Plain’, ‘Jones’, ‘Idle’, ‘Gillianm’]
   

[in]:

    # 习题
    # 第一章 p13
    # 把每部电影的出品年代加到列表中
    # 象下面这样: [‘The Holy Grail’, 1975, 1975, 1979,
    # ‘The Life of Brian’, 1979, ‘The Meaning of Life’, 1983, 1983]
    # 把数字放进列表的时候,数字不用加引号
    movies.insert(1, 1975)  # 第1个插入到第2个列表项前
    movies.insert(3, 1979)  # 第2个插入到第4个列表项前(好好想想为什么用3)
    movies.append(1983)  # 最后一个追加到末尾就行
    print(movies)

[out]:

    [‘The Holy Grail’, 1975, ‘The Life of Brian’, 1979, ‘The Meaning of Life’, 1983]
   

[in]:

    # 列表: 迭代
    # 第一章 p15
    # 迭代: 用一个for循环,把列表中所有的项逐个打印出来
    # for … in …表示取这个列表的每一个数据
    for i in movies:  # 这里的i随便用哪个(一个或多个)字母都行
        print(i)  # 只要两个i保持一致.你可以试试用不同的字母

[out]:

    The Holy Grail
    1975
    The Life of Brian
    1979
    The Meaning of Life
    1983
   

[in]:

    # 列表: 迭代
    # 第一章 p16
    # 迭代: 用一个while循环,把列表中所有的项逐个打印出来
    # 效果和for循环一样
    # while xx < xxx表示:只要xx < xxx,就一直执行下去, 直到这个条件不成立
    count = 0
    while count < len(movies):  # 前面刚学过的len用法
        print(movies[count])  # 前面刚学过的中括号记法
        count += 1  # 和书本上的count = count + 1相同, 表示让count自增1

[in]:

    # 列表:在列表中储存列表
    # 第一章 p18
    # 我们用movies这个列表来记录一部电影的数据. The Holy Grail这部电影全名叫
    # 《Monty Python and the Holy Grail》(巨蟒与圣杯),1975年出品,两个Terry是导演,
    # 同时也参加了演出。影片时长为91分钟,Chapman是编剧(同时也是主演)。Michael这
    # 一伙人既是编剧,亦是配角。这帮人真是玩嗨了,自编自导自演。
    movies = ["The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91,
              ["Graham Chapman", ["Michael Palin", "John Clseese",
                                "Terry Gilliam", "Eric Idle", "Terry Jones"]]]
    print(movies)

[out]:

    [‘The Holy Grail’, 1975, ‘Terry Jones & Terry Gilliam’, 91, [‘Graham Chapman’, [‘Michael Palin’, ‘John Clseese’, ‘Terry Gilliam’, ‘Eric Idle’, ‘Terry Jones’]]]
   

[in]:

    # 用for循环处理这个列表
    for i in movies:
        print(i)

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
    [‘Graham Chapman’, [‘Michail Palin’, ‘John Clseese’, ‘Terry Gilliam’, ‘Eric Idle’, ‘Terry Jones’]]
   

[in]:

    # 列表:在列表中查找列表
    # 第一章 p20
    # isinstance: 判断标识符的类型
    names = [‘Michael’, ‘Terry’]
    isinstance(names, list)  # 判断它是不是列表(list)类型
   

[out]:

    True

[in]:

    # 列表:在列表中查找列表
    # 第一章 p20
    # isinstance: 判断标识符的类型
    # 换个方式
    num_names = len(names)
    isinstance(num_names, list)

[out]:

    False

[in]:

    # 列表:在列表中查找列表
    # 第一章 p21
    # 习题: 把上面那个movies列表中的每一个数据项都打印出来
    # 用if … else …模式
    # 结合isinstance
    for i in movies:
        if isinstance(i, list):  # 先判断i是不是列表
            for j in i:  # 是的话用for循环
                if isinstance(j, list):  # 还要再往下挖一层, 因为还有一个嵌套的列表
                    for k in j:
                        print(k)
                else:  # 每一对if…else…要对齐
                    print(j)
        else:  # 不是列表就直接打印
            print(i)
    # 如果再来一层嵌套的列表, 怎么办?

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
    Graham Chapman
    Michail Palin
    John Clseese
    Terry Gilliam
    Eric Idle
    Terry Jones
   

[in]:

    # 函数
    # 第一章 p30
    # 使用函数可以简化刚才写的那段代码, 再多来几层列表咱也不怕啦!
    # def关键字是define的缩写,python看到def就知道这个是函数
    def print_lol(the_list):  # print_lol就是我们定义的函数名,尽可能把名字起得有意义一点
        for i in the_list:
            if isinstance(i, list):
                print_lol(i)  # 如果是列表, 那么调用"自己"再次处理这个列表
            else:
                print(i)

[in]:

    # 函数
    # 第一章 p30
    # 我们来用print_lol这个函数来打印我们的列表movies
    print_lol(movies)  # 看看,代码是不是精简了很多?

[out]:

    The Holy Grail
    1975
    Terry Jones & Terry Gilliam
    91
    Graham Chapman
    Michail Palin
    John Clseese
    Terry Gilliam
    Eric Idle
    Terry Jones

   

第一章完。

本文笔记下载地址:

链接:http://pan.baidu.com/s/1eR4iJoI 密码:t72j

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

《配音小丫》诞生记

很久以前,舍得就想做这样一款软件。那是在2013年,舍得学苑开启“视频月”活动,当时要发布一连串的视频。辣么问题来了,视频好做,配音却不好搞。虽然舍得在北方呆过蛮久的时间,但普通话自认还不够标准。怎么办呢?

以前接触过TTS语音,当时便想用TTS来做,用文本直接合成语音。中文的语音合成,最牛x的自然是讯飞。2010年舍得制作视频的时候,配音用的就是科大讯飞的InterPhonic 5.0。不过最近几年讯飞发展挺快,还专门搭建了一个讯飞开放平台。InterPhonic 5.0和现在最新的语音技术相比,已经不可同日而语了。

2014年舍得注册了个讯飞的账号,下载了它的SDK,硬着头皮用其它现成的C++源代码改出一个自己用的小程序来,当时的程序是酱紫滴:

001K43yhzy6Opg1bojg02&amp

用法也很粗糙,在最上方的文本框中输入要合成的文本,然后点击开始合成就OK了。

不过这样还是不大理想……舍得做视频的时候,往往是先写好要配音的脚本,到配音的时候,能不能把这个脚本交给程序,让它自动生成一连串音频文件呢?

要不然,这样一行行往里输入,得多慢啊!

于是乎就有了今天的《配音小丫》。

从界面上讲,小丫似乎比原来的程序还退步了……因为,她根本就没有图形界面。

小丫工作时是酱紫滴:

SNAG-0138

我在她所在的文件夹下放了一个叫source.txt的文档,文档内放的正是我写的配音脚本。

然后打开小丫,她就腾腾腾开始合成,输出的文件是按1、2、3、4、5……这样的顺序来的,而且是wav格式,直接就可以用。

等小丫把脚本里每一行文本合成完毕,按个“任意键”就可以让她收工了。

虽然样子简陋了一点,但效率可不止高了一点点。

以后有时间,还是要给小丫加个图形界面滴。

最后,上个小丫的“身份证明”:

SNAG-0139

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

【新手必读】SuperMemo如何入门?

前几日在论坛内看到有童鞋抱怨说,“我花了半个月还没入门”,“我下载不到东西”……有感于此,舍得觉得很有必要来给新接触SuperMemo的童鞋写这样一篇文章。

首先是版本的选择。请使用SuperMemo UX版,版本相关的介绍请看此处:《浅谈SuperMemo的版本选择

然后舍得来回答“花了半个月还没入门”的问题。

SuperMemo的入门非常简单,你不需要去做太多的事情:

  • 下载并安装SuperMemo。官方下载地址:http://www.supermemo.pl/download/smux/smux.zip。下载后可以更新到最新版本。通常使用英文原版即可,界面上没几个英文单词。有进一步需要的,可以下载舍得汉化的版本,但下载是有条件滴:《【九月福利】SuperMemo UX 1.5.4.2汉化尝鲜版【需有回复权限】》。推荐将SuperMemo安装在Win7以上的操作系统,建议用Win8。Win XP需要系统内装有.netframework和8.0以上版本的IE;
  • 新建账户&添加新课程安装完毕,打开程序,开始新建账户(只需做一次)、添加新课程,具体的操作请观看舍得录制的视频《新建账户&添加新课程》;
  • 课程哪里找?请点击舍得学苑课程下载中心,查看一下是否有你需要的课程。你还可以登录舍得学苑淘宝专卖店来查看学苑制作的精品课程,也可以在专卖店内付费定制你所需的课程。论坛内发布的课程不保证长期有效,如果论坛链接失效,请不要抱怨“我下载不到东西”。若以上都不符合你的胃口,建议自行制作;
  • 如何制作课程?作为新手,建议不要去涉及高级的制作工具,如转换精灵之类。你现在要的是“入门”,而不是一下子成为“课程制作专家”。饭要一口口吃,路要一步步走,步子太大,容易扯着蛋。那么新手如何制作课程呢?直接进编辑模式逐页添加,这是最简单的方式。具体操作请看视频《如何制作课程》。在入门阶段,请暂时抛开所有对制作和辅助工具的念想,什么转换精灵、课程编辑器、课程助手……不要去想那么多,直接从学习入手!把自己的注意力聚集在学习本身,其它的内容,可以留到你对SuperMemo的使用足够熟悉之后,再抽空来了解。
  • 如何开始学习?舍得认为,对于刚入门的童鞋,不宜去折腾各种课程制作方面的工具。也无需去想手机上怎么用,直接从UX版开始即可。看起来拿着手机用碎片时间来学习是一件非常美好的事情,但若你认为你只有在手机上才肯开始学习,亲,你要解决的不是学习方法、学习工具这个层面的问题,而是自己的学习动力、学习动机的问题。关于如何使用SuperMemo UX,同样有现成的视频可以观看、学习:《SuperMemo UX软件使用基本流程》、《SuperMemo UX的评分标准》,其它的一些操作技巧上的内容,你可以通过舍得学苑发布的相关视频中学习。

掌握以上这点内容就够了!不要去想太多,既然说入门,就该好好掌握基本的操作,不要去想着把自己一下变成这个领域的专家级人物。

说入门难,可能是自己定位过高,想得太多……简单一些吧!眼下你需要的是用SuperMemo来提升你的学习效率,而不是花大把的时间去折腾工具。何苦让尚在入门阶段的你,背负太多本不需要加在你身上的包袱呢?

记住,你不用去寻找各种各样的工具,除了SuperMemo UX软件和个别的课程,没有什么东西是需要你去下载的。

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

【新手必读】SuperMemo如何入门?

前几日在论坛内看到有童鞋抱怨说,“我花了半个月还没入门”,“我下载不到东西”……有感于此,舍得觉得很有必要来给新接触SuperMemo的童鞋写这样一篇文章。

首先是版本的选择。请使用SuperMemo UX版,版本相关的介绍请看此处:《浅谈SuperMemo的版本选择

然后舍得来回答“花了半个月还没入门”的问题。

SuperMemo的入门非常简单,你不需要去做太多的事情:

  • 下载并安装SuperMemo。官方下载地址:http://www.supermemo.pl/download/smux/smux.zip。下载后可以更新到最新版本。通常使用英文原版即可,界面上没几个英文单词。有进一步需要的,可以下载舍得汉化的版本,但下载是有条件滴:《【九月福利】SuperMemo UX 1.5.4.2汉化尝鲜版【需有回复权限】》。推荐将SuperMemo安装在Win7以上的操作系统,建议用Win8。Win XP需要系统内装有.netframework和8.0以上版本的IE;
  • 新建账户&添加新课程安装完毕,打开程序,开始新建账户(只需做一次)、添加新课程,具体的操作请观看舍得录制的视频《新建账户&添加新课程》;
  • 课程哪里找?请点击舍得学苑课程下载中心,查看一下是否有你需要的课程。你还可以登录舍得学苑淘宝专卖店来查看学苑制作的精品课程,也可以在专卖店内付费定制你所需的课程。论坛内发布的课程不保证长期有效,如果论坛链接失效,请不要抱怨“我下载不到东西”。若以上都不符合你的胃口,建议自行制作;
  • 如何制作课程?作为新手,建议不要去涉及高级的制作工具,如转换精灵之类。你现在要的是“入门”,而不是一下子成为“课程制作专家”。饭要一口口吃,路要一步步走,步子太大,容易扯着蛋。那么新手如何制作课程呢?直接进编辑模式逐页添加,这是最简单的方式。具体操作请看视频《如何制作课程》。在入门阶段,请暂时抛开所有对制作和辅助工具的念想,什么转换精灵、课程编辑器、课程助手……不要去想那么多,直接从学习入手!把自己的注意力聚集在学习本身,其它的内容,可以留到你对SuperMemo的使用足够熟悉之后,再抽空来了解。
  • 如何开始学习?舍得认为,对于刚入门的童鞋,不宜去折腾各种课程制作方面的工具。也无需去想手机上怎么用,直接从UX版开始即可。看起来拿着手机用碎片时间来学习是一件非常美好的事情,但若你认为你只有在手机上才肯开始学习,亲,你要解决的不是学习方法、学习工具这个层面的问题,而是自己的学习动力、学习动机的问题。关于如何使用SuperMemo UX,同样有现成的视频可以观看、学习:《SuperMemo UX软件使用基本流程》、《SuperMemo UX的评分标准》,其它的一些操作技巧上的内容,你可以通过舍得学苑发布的相关视频中学习。

掌握以上这点内容就够了!不要去想太多,既然说入门,就该好好掌握基本的操作,不要去想着把自己一下变成这个领域的专家级人物。

说入门难,可能是自己定位过高,想得太多……简单一些吧!眼下你需要的是用SuperMemo来提升你的学习效率,而不是花大把的时间去折腾工具。何苦让尚在入门阶段的你,背负太多本不需要加在你身上的包袱呢?

记住,你不用去寻找各种各样的工具,除了SuperMemo UX软件和个别的课程,没有什么东西是需要你去下载的。

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

Python主流IDE对比:Eric&nbsp;VS.&nbsp;PyCharm

IDE, 全称是Integrated Development Environment,翻译过来就是集成开发环境。Python的开发从2010年5月算起,不知不觉中,到现在已经是第七个年头。

这六年里,舍得最常用的IDE是Eric6(一开始是5.x版本),也试用过圈内闻名的PyCharm、WingIDE和Eclipse(+PyDev插件),算是有些心得。今天,着重对Eric6和PyCharm 2016.3作一下简单的评测。

颜值

Eric6是基于PyQt开发的,程序运行甚至只用一个BAT文件来调用,界面相对而言略丑。PyCharm基于Java开发,自带的主题很漂亮,风格比较统一。在颜值这一点上,无疑是PyCharm胜出。

顺带提一下WingIDE,虽然它也带了很多款主题,但整个窗口中有些部位是不受主题控制的。举个栗子,当你选择深色的主题时,窗口左下角往往会有一块白色的控件,忒刺眼。

速度和内存开销

从启动到打开一个项目,舍得掐着秒表测试了这几款IDE,数据如下:

  • 最慢的是PyCharm,平均需要18-20秒左右。就算把插件干掉只剩两个,再将Xms和Xmx参数适当调整,跑出最快的成绩是16秒5;
  • Eric平均只用11秒;
  • 最快的是WingIDE, 只用7秒;

内存开销上,PyCharm是大户,动辄就是吃掉你300-400MB的内存。机子内存小的童鞋要当心了!

UI和资源编译

开发过程中难免要对UI和资源文件进行调整,所以IDE中自然需要将这两项的编译工作集成进来。

Eric6是原生支持UI和资源文件编译的,它的开发者早就想到了我们需要这项功能。

PyCharm作为一个专业的Python IDE,在这方面无疑略显不足。要实现UI和资源编译,你必须手工在外部工具设置中添加它们(具体操作请自己去问度娘),虽然设置好之后和Eric6比也没啥区别,但总是开发者欠考虑。

不过PyCharm这个外部工具的设计还是值得赞赏的,你可以直接把打包命令(我通常用cx_freeze)直接整合进去,这样就方便多了。

调试

IDE中应当配备调试模块。舍得以前常在DOS命令行下运行开发中的程序,发现错误再切回IDE。现在想想实在是浪费了IDE自带的调试模块。

使用调试模块,首先带来的好处是你不必手工输入命令,也不必在DOS命令行和IDE间切来切去;其次,当遇到错误时,IDE的调试模块会直接显示出错误所在的位置,你不必再去手动寻找。当然调试模块的功能不止于此,具体如何,童鞋们可以自己去深入体会。

在调试方面,Eric6做得更好一些,在遇到错误时,它会自动跳到最终让你出错的位置,省时省力。PyCharm做法略嫌保守,它是在底部的“运行”窗口显示一系列出错的位置,每一个位置带有链接,点击链接即可跳到相应的行。舍得认为,不如在保留链接功能的前提下,自动跳到最后一行出错的位置,通常这一行是问题的关键。如果程序能够做得更智能一些则更好。

智能缩进

在Python的语法中,缩进是非常重要的一项。开发过程中,缩进若能更智能化一点,自然写代码的速度也会快一些。

在这方面,做得最优秀的是Eric6。它的牛x之处在于,无论你的光标键在哪个位置,只要你按TAB键,程序就会根据上面的代码选择合适的缩进位置。

PyCharm亦有类似的设计。它的智能缩进操作英文名叫Emacs Indent(建议将快捷键TAB设置给它),国内的汉化莫名其妙地翻译成了“宏选项卡”,这一定是外行人干的。

但Emacs Indent在处理整块缩进的时候略显无力,当我们要将整块代码往前移的时候,只能使用另一项叫作“取消缩进内容”的操作,而Eric6只要一个TAB键就足够了。

字体缩放

虽然我们可以在设置中给IDE的编辑器设一个特定的字号,但在实际开发中,还是免不了要适当缩放字体。尤其是大屏幕,字体适当放大一些,眼睛不至于那么遭罪。

字体的缩放这两款IDE都有。只不过,Eric6是早已设置好快捷键的(用Ctrl+=/-,或Ctrl+滚轮),而在PyCharm中,你必须手动设置这个快捷键。

这一轮,算打成平手好了。

自动补空格

PEP8的规范要求在逗号、运算符号之类的内容后面加一个空格,这一点Eric做得不错,在你输入一个逗号后,它会自动给你补一个空格,而PyCharm显然考虑得没有那么周到。你不得不手动一个个敲空格,或留着到最后使用Reformat File功能来纠正。

代码自动补全和代码规范化

两款IDE的代码自动补全做得都挺好。硬要挑出一个更好的来,我会把票投给PyCharm, 它的智能化程度似乎(我没法给出更精确的评价,建议自行体会)更高一些。

PyCharm除了自动补全,还会用类似拼写检查的方式检查你的代码,当你输入的代码不符合PEP8之类的规范时,PyCharm会适时提醒并对该部分代码作出标记。这个功能确实很贴心,我有理由相信用PyCharm会帮助我们将代码写得更加规范。

此外,PyCharm还会对当前方法下所用的变量进行检查,当有变量出现未使用、不一致、输入错误等情形时,PyCharm亦会将其一一标出,让你一目了然。

版本控制

版本控制也可算是IDE的标配了吧!Eric6和PyCharm都有版本控制的模块,不过舍得认为,PyCharm在这一块做得更细一些,和GibHub结合得很好,舍得用得很趁手。

数据库连接、查看

这项功能只能算是可选配置了。两款IDE都带有数据库内容浏览的功能,它的方便之处在于,我们要查看数据库中某项数据时,可以不必打开专用的数据库管理工具(比如SQLite的SQLite Expert, PostGreSQL的PG Admin,MySQL的PHPMyAdmin等),直接在IDE内查看。

Eric6自带一个内建的SQL浏览器,界面相对简陋,而且每次打开都必须重新设置,不够方便。

PyCharm是通过Database Tools and SQL这款插件来实现数据库连接和查看的功能,用来临时查看一下数据是足够了。

书签

在开发过程中,我们经常需要在一个文档中不同的位置间切换,此时书签功能会给我们带来很大的便利。

两款IDE都有书签功能,PyCharm做得更好一点,它的书签不会因为你退出程序而清除。而Eric6则会在你每次退出程序时,清空你的书签设置。

TODO

舍得在堆代码的时候,想到一些下一步要完善的功能之类的内容时,往往会在文档中插入一行,行首写上“# todo,”,然后把当时的想法写进去。这样日后就能根据todo的标记和内容来逐渐完善自己所开发的软件。

两款IDE都支持Todo功能,它们会把你在当前项目中的每一行标有todo的内容都搜集起来,以供你随时查看。只是在功能的完善性上,略有差距:

  • PyCharm在你输入“# todo,”的时候就将这一行进行高亮处理,让它变得非常醒目,Eric6默认是不会对“# todo,”作高亮处理的;
  • PyCharm的todo支持大小写,Eric6默认只支持大写,要想支持不同的格式,需要单独设置;

相比之下,PyCharm以微弱的优势胜出。

帮助文档

Eric6自带一个WebKit内核的帮助浏览器,当你设置好Python/PyQt/Pyside/Qt等帮助文档的路径后,可以在帮助菜单中直接点击这些文档的链接,Eric6就会调用帮助浏览器来显示这些文档。

PyCharm虽然有一个外部文档的设置和对应的菜单命令,但功能实在太弱比,应该好好完善一下才是。

另外PyCharm虽然提供了一个Search EveryWhere的“强大”功能,但由于搜索结果匹配往往不能尽如人意,使得此功能形如鸡肋。

结语

通过上面的比较和分析,相信大家自会得出自己的答案。简单说一下舍得的观点:

  • 如果你是个颜控,请选择PyCharm;
  • 如果你的电脑配置略低(尤其是内存),跑PyCharm感觉慢、卡,请选择Eric6;
  • 大多数功能,这两款IDE都大同小异。舍得最介意的是,PyCharm没法在逗号后居然不能自动补空格,希望开发者能在后续的版本中进一步完善;
  • 至于很多仍在使用非IDE(比如用vim、emacs、sublime text之类的编辑器)的童鞋,舍得的建议是,IDE可以让你的开发效率更高。看上去你用这些编辑器也能完成大部分工作,但别忘了,你费尽九牛二虎之力搞定各种插件的同时,IDE上这些功能早就已经非常成熟了,何必自己再去造轮子呢?

 

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

如何禁用Windows的crashdump?

crashdump这个词略显专业了点……so,舍得决定换个描述方式:如何禁止Windows的应用程序崩溃时在你硬盘上生成庞大的dmp文件?

这还真是一个真实存在的问题,曾困扰了舍得不短的时间,问题刚刚解决。

舍得这里讲的Windows,特指Windows 8。本文讲到的方法,Win7和Win10或许也能适用,但未测试。但Win xp基本上就不包括在内了。话说装xp的童鞋,你早该换Win8了。

先来介绍一下问题的背景。

在Win 8系统中,当应用程序崩溃掉之后,会在你的硬盘内生成一个扩展名为dmp的文件,这个文件动辄数百MB,大一点的也有上G的。更要命的是,这些文件不会被自动清理,你只能通过手工或磁盘清理之类的方式把它删掉。

电脑上已安装Everthing的童鞋,可以用”*.dmp”(不含双引号啊!)搜索一下,看看你的系统中是不是有这些垃圾文件。

简单科普一下这个dmp文件是怎么回事。它是程序崩溃后,把崩溃那一刻的内存Dump(储存)下来,供专业人员检查或调试。你会调试么?舍得是不会滴,所以,这些文件对舍得来说,屁用没有。

既然没用,还让它呆在硬盘里,白白占用空间作甚?舍得的硬盘总共才256G,装了OS和Win8两个系统,还有一大堆软件,空间实在紧张得要死。所以舍得要说,这个问题真真困扰了好久。

之所以是“好久”,最大的原因是没有下决心去解决它。

其次嘛,嘿嘿,舍得不得不说,现在网络上垃圾信息实在太多了。找一个解决方案,你用不对关键词,找到正确答案跟买彩票中大奖的概率有得一比。

比如说,为了解决这个问题,换了一连串的关键词,搜索出来一大堆没用的东西:

  • 有人说,应该打开高级系统设置,在启动和故障恢复中把“写入调试信息”改为“无”——亲,这个是针对系统崩溃的,跟应用程序崩溃,一毛钱的关系都没有;
  • 有人说,在控制面板中进入操作中心,找到问题报告设置,选择“从不检查解决方案”,依旧没用;
  • 有人说,打开组策略,在管理模板->Windows错误报告下,启用“禁用Windows错误报告”,还是没用;
  • ……

舍得凭什么说这些没用?因为,以上的招数舍得都一一试过啦!在这方面,舍得拥有得天独厚的优势:Razer鼠标自带的雷云,每回一运行,它的RzStats程序必然报错,必然会生成一个接近300MB的dmp文件,在这里,顺带鄙视一下Razer公司,什么玩意?一个鼠标配套应用程序都搞不定!

经过层层测试,多番寻觅,最终舍得找到了接近完美的解决方案:

  • 按Win+R组合键,输入”regedit“,再按回车,打开注册表编辑器;
  • 逐层进入这里:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
  • 将DumpCount设置为0,意思是,一个dmp文件都不让你生成;
  • 将DumpType设置为0,这个其实不设置也没问题(未进行深入测试),顺手设一下吧!
  • 重启操作系统;

SNAG-0132

把以上工作做完后,舍得先打开Everything以便监测dmp文件的生成情况,再运行Razer的雷云程序……擦,怎么还有dmp文件生成?

SNAG-0133

吓舍得一跳。定睛一看,嘿嘿,这文件只有377KB,而且,以往它要往CrashDumps文件夹下钻的,现在,它只能乖乖地呆在自己的文件夹下。

几百K的文件,舍得还是能承受滴。

至此,问题基本搞定。

本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
作者:舍得
首发:舍得新浪博客

标签:

Python:起步

Hi,我是舍得。

六年前,我为了给SuperMemo设计一个辅助工具,无意中撞进Python这个圈子,从此,一发不可收拾。

当时,我的编程知识几乎可算是零基础。真要认真滴追根溯源的话,嗯嗯,我在2000年左右开始接触asp,做过几个网站,然后慢慢学了点PHP,直到2009年,建了一个叫“舍得学苑”的网站。然而,毫不客气的讲,这些对于我后来学习编程,帮助真的不大。

都说学编程最好有不错的英语基础。这倒不假。你若能有一定的英语阅读能力,在Python的学习中,可以直接去查看各种英文文档。

不要被”英语基础“这四个字吓倒。舍得的英语基础并不好,当年在读技校的时候是没有英语这门课的。so,我的“原始”英语基础仅仅是初中水平。能读英文文档,完全是后来慢慢一步步积累起来的。我能做到的,你自然也能。

为什么选Python?

这个嘛,我还真没办法告诉你一个完全正确的答案。

我只能很唯心滴讲几点自己的看法:

  • 简单,学习成本低:连我这零基础的都学得会,六年间,开发了转换精灵、课程助手、课程编辑器等软件,自然是因为Python的学习成本够低;
  • 开发速度够快:写几行代码,随时可以运行一下看到效果;
  • 大量的库可用:你不必自己去造轮子。自带的标准库不必再说了,读写excel有xlrd/xlwt,数据分析有pandas,数据库工具可选用sqlalchemy,打包可以用cx_freeze……

    至于图形界面的开发,可以使用PyQt,同样非常的方便。

    如何开始?

    俗话说,万事开头难。这个一点不假。

    难在哪里?

    难在刚开始的时候容易碰到各种卡到你的问题,这确实是一件让人扫兴的事情。所以,若能让学习之路变得更好走一些,让学习的曲线更平坦一些,无疑会帮助我们更快地度过学习的起步阶段。

    那么,从哪开始呢?

  • 给自己的电脑上装上python,舍得根据目前的Python的现状,推荐安装Python3.4.x。3.3及以前的版本,有些常用的库慢慢地不再支持,而3.5及以后的版本呢,也有一部分的库还来不及支持它,所以当下最适合的版本是3.4.x。舍得会在文末放出相应的下载地址,当然,你也可以去官方下载;
  • 阅读《Head First Python》。刚学Python时不要去读太多书!最好的学习方式是边读书,边敲代码来验证、来获得最直观的体验,代码执行的结果会让你明白,哦,原来书中讲的是就是这个!我们不需要知道为什么写这个代码可以获得这样的结果,我们只要记住,这个代码可以让你实现这种效果,下次这么去用就行了。《Head First Python》是Python入门类书籍中的佼佼者,舍得竭诚推荐优先食用;
  • 使用一些工具,来加快学习过程,提升学习效率。这个呆会舍得再细讲;

    之后怎么学习?

    严格地讲,这个话题应该留到以后。不过舍得觉得,先预告一下也无妨:

    • 进一步完善开发环境:安装PyQt4、Eric6,还有一些常用的库;
    • 从PyQt4的官方范例入手学习:这是最快的学习方式之一。官方范例大多短小精悍,你可以像舍得一样,走”修改流“路线,把它们修修改改,跟捏橡皮泥一样,最后捏出的东西跟你自己的作品一样。这个跟刚开始学自行车一样,一开始有人帮忙扶着、看着,骑得熟了,慢慢不用扶,不用看了,你就学会骑车了;

    如何用工具来提升学习速度?

    前面舍得讲到,我们要在看书的同时,做相应的练习。这个练习,可以用Python自带的Shell来完成。但老话说的好,工欲善其事,必先利其器。用自带的Shell来做练习,太过原始了。现在,我们可以有更好的办法。

    方法一:安装ipython。这是一个python的交互式的shell,比自带的强太多了。下面舍得直接讲安装办法(注意,以下所用到的安装包均会在文末提供下载,操作系统为windows-win7或win8,示例用的Python默认安装路径为”C:\Python34”):

    1. 先将舍得提供的ipython-5.1.0-py2.py3-none-any.whl文件解压到Python34\Scripts文件夹下;

    2. 打开命令提示符窗口,转到python下的Scripts文件夹下:

      • 按Win+X组合键,从弹出的快捷菜单中选择“命令提示符(管理员)”;
      • *如果你的系统盘和Python安装位置并不在同一分区,比如你将python装在“D:\Python34”下,而系统盘是C,那么需要输入“D:”再敲回车;
      • 输入“cd\Python34\Scripts”,然后敲回车, 就会进入Scripts文件夹下;

    3. 输入“pip install ipython-5.1.0-py2.py3-none-any.whl”,再敲回车;

    4. 如果没有出现错误提示的话,你可以Scripts文件夹下找到“ipython3.exe”这个文件,用鼠标右键点击它,然后从弹出的菜单中选择“发送到->桌面快捷方式”,以后只要运行它,就可以在这个ipython的窗口下敲敲代码来学习了!

    SNAG-0127

    方法二:安装notebook。这是一种更高级、用起来更爽的方式,舍得以后发的部分文章,会发布相应的notebook文档。这个需要安装多个包,下面一一讲解:

    1. 将下面用到的whl文件解压到Python34\Scripts文件夹下;

    2. 打开命令提示符窗口,转到python下的Scripts文件夹下,具体方法详见方法一;

    3. 输入“pip install pyzmq-16.0.2-cp34-cp34m-win32.whl”,再敲回车;

    4. 输入“pip install Jinja2-2.8-py2.py3-none-any.whl”,再敲回车;

    5. 输入“pip install tornado-4.4.2-cp34-cp34m-win32.whl”,再敲回车;

    6. 输入“pip install notebook-4.2.3-py2.py3-none-any.whl”,再敲回车。理论上3-5步可以不做,直接做第6步也行,但那样靠它自已去获取相应的依赖包(就是3-5中的这仨),下载速度可能会比较慢,有时甚至会安装中断,推荐这样逐个安装;

    7. 以上工作完成后,你可以Scripts文件夹下找到“jupyter-notebook.exe”这个文件,用鼠标右键点击它,然后从弹出的菜单中选择“发送到->桌面快捷方式”,当然你可以双击它直接运行;

    8. 双击运行jupyter-notebook.exe,程序会在你的浏览器(推荐在系统内安装chrome,如果你还在用IE系列的浏览器,辣么,是时候告别它了)中打开Jupyter的页面。这是jupyter-notebook利用tornado这个web框架搭的一个本地服务器——如果你对这些名词不熟悉,先别管它,你只要知道,执行这个程序,你就可以在浏览器中敲代码来学习。

    9. 在Jupyter的页面右侧找到并点击”New“按钮,从下拉菜单中选择”Python3”:

    SNAG-0129

    10. 我们可以在接着打开的页面中输入代码,输入到前面带“In”字样的文本框内即可,然后点击SNAG-0131按钮,就可以看到代码执行后的效果。

    SNAG-0130

    11. 每天用Jupyter notebook一一敲完当天所学、所用过的代码后,你可以点击左上角的”File”按钮,然后从菜单中选择“Download as->Notebook”,可以把当天的学习成果存成”ipynb”格式的文档,供以后回顾、复习使用。这个,就是ipython所不能提供的功能,更不用说python自带的shell了。

    还有什么高效的工具?

    要想快速度过起步时的困难阶段,缩短“新手期”,降低学习成本,将新学到的知识点牢牢记住是最佳的选择。

    而记住这些知识点,靠什么?一是反复地练习,二是有目的、有针对性地去复习。

    舍得建议大家使用SuperMemo UX来帮助自己复习每天新学到的知识点。这个软件的使用并不难,具体的使用方法,舍得会撰写专文讲解。在后续的话题展开过程中,舍得也会制作一些相应的SuperMemo课程,来帮助大家提高学习效果。

     

    好了,Python的起步部分就先介绍到这里。顺便提供本文中讲到的一些工具的下载:

    一、Python 3.4.4.msi

    链接:http://pan.baidu.com/s/1kVDbPyf 密码:oqba

    二、《Head First Python》中文版,pdf格式,相应的阅读器请自行下载,推荐使用百度阅读器。

    链接:http://pan.baidu.com/s/1c1O5g7A

    三、Python推荐安装包:

    链接:http://pan.baidu.com/s/1dFHrKK5 密码:so4k

     

    本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
    作者:舍得
    首发:舍得新浪博客

  • 开发代号:MTD

    舍得之所以搞了一个叫做"开发代号"酱紫看似颇高的词汇,着实是因为一时半刻,还没有给这款软件想好名字,说不得到时还要在学苑内搞一次征名活动,好充分利用一下广大童鞋的智慧。

    自然,这个MTD也不是瞎编出来,它是有出处滴。MTD的叫法源自GTD。估计还有一小部分童鞋不知道GTD是啥,且容舍得来小小科普一下。

    GTD的全称叫Getting Things Done。它一开始是David Allen在2002出版的一本畅销书的书名,中文版书名译为《尽管去做:无压工作的艺术》,但舍得觉得台湾地区的版本译名略吊,它叫《搞定!2分钟轻松管理工作和生活》。

    David Allen提出,必须记录下来要做的事,然后整理安排并使自己一一去执行。广大吃瓜群众一看,这个好啊!行动力较强的一拨人纷纷开始实践,因此催生出一批GTD的软件,舍得觉得这些软件中比较成熟的有wunderlist(奇妙清单)、TickTick(滴答清单)、any.do、Omnifocus、Doit.im和Remember the milk等。

    进入正题之前,先简要对这部分软件作一下点评:

    • wunderlist:德国人开发,现已被微软收购。wunderlist在各种你能想到的主流平台上都发布了针对性的版本,逻辑清晰,颜值颇高,而且各个平台间同步飞快。推荐食用;
    • TickTick:美国人开发,它和wunderlist相比最大一弱势是没有放出Windows平台的客户端,有的只是一款安卓浏览器的插件。它和wunderlist相比,优势之处在于多了一个使用语音输入的功能;
    • any.do:同样是美国人开发的软件,Windows上和TickTick一样,只有Chrome的扩展可用。
    • Omnifocus据称是GTD的神器,刚出的时候舍得在iphone和mac上用过一段时间。最大的问题是,你没法在Windows和安卓上使用它;
    • Doit.im: 收费,每月10块。按说现在一碗面都10-15块了,这个价格并不算贵。但问题是,它所拥有的软件特性,wunderlist丝毫不比它差,那为啥还要找付费的?不推荐食用;
    • Remember the milk:最大的问题是,它的所有操作是必须靠网络来完成,没网络你啥都干不成。对于GTD类软件来说,这也算是自绝于天下的一大狠招了。不推荐食用;
    • ThinkingRock:曾被称为“最好的GTD软件”。的确,从概念上看,它可能算是照搬GTD书上做法最彻底的一个。但是,软件是拿来用的,这个软件在易用性上已经做到快落后一个时代了。使用上尚且做不到方便快捷,舍得有何理由来推荐呢?有人说,它现在变得非常非常漂亮,我勒个去!毫不客气地说,它的颜值,离舍得开发的软件相比,还特么差一个档次呢!

    MTD的英文全称参考了GTD,叫做Making Things Done。真要细究的话,可参考supervise(监督、管理、指导)一词的英文释义:make sure that everything is done。get和make这两个词,从英文上讲,make更显主动一些。你要get(得到)一样东西,总得有人给吧?这就意味着主动权不在自己手中。有人说,get还有“抓住”之意,但是,你要“抓住”一样东西,这样东西得先存在吧?make就不一样了,没有机会,我们可以创造机会啊!老话说的好,有困难要上,没有困难,我们制造困难也要上啊……君不见,连love这种人人喜欢的东西,用的动词都是make么?你若见到有人用get love,会不会小小地惊讶一下?

    既然GTD软件这么丰富了,舍得为啥还要开发一个MTD?这得从GTD类软件自身的缺陷说起。

    • 这类软件通常是三层左右的结构,清单(或者叫项目)->任务->子任务。这种分法没有问题,然而,绝大多数软件不支持这三者之间的自由转换。举个栗子,你建了一个任务,之后发现若把它放到另一个任务下,作为该任务的子任务……抱歉,你做不到;
    • 到子任务一级,你所能做的操作极少,只能做:改变任务的名称、标记任务为已完成和删除任务;
    • 对重复性的任务支持非常薄弱。莫非在GTD看来,事情大多是那些临时从哪冒出来,而且做完就拉倒,不需要隔一段时日重复执行的么?非也。无论是工作和生活,那些内容一样或相似的重复性事务,占据了相当大的比重。比如日常健身,学生的功课学习等;
    • GTD只能帮你记录你做了、做过哪些事务,至于你在这些事务上花了多少时间,做了多少量,完成的效率如何,它根本没有涉及。或许是因为GTD的开发者们太过推崇David Allen的原始理念,以至于丝毫不敢有自己的想法去拓展了。

    很久以前舍得就有一款类似MTD的软件的构思,当时的想法有点接近蕃茄钟的做法。为了不使下面的描述太过枯燥,舍得将情境设定为健身。我们可以提前就健身项目做出一些计划——大家都知道,这些事务大多重复性很强。在开始某项健身训练的时候,让程序开始计时,而当训练完成的时候,再将计时终止。中间我们还可以随意地暂停……这样训练结束时,我们就得到了相对精确的训练时间。当这个数据积累到一定程度的时候,我们便可以让程序帮助分析。随着记录的逐渐增加,那种随时可以查看的训练量不仅会带给你小小的成就感,还会让你欲罢不能——哇,这么多的训练我都坚持下来了,放弃掉实在太可惜了!

    健身,只不过舍得设定的情境之一而已。还有学习,不论是已出校园的还是没出校园的,有MTD这类软件的帮助,效率会更高,动力更足。小日本便开发了这样一款软件,它叫StudyPlus。舍得来介绍一下这款软件,因为,它基本上可以算是舍得用来设计MTD的一个重要的参照范本。

    在StudyPlus中,项目不再叫项目,而叫做“书架”,而GTD中的任务,则变成了一本本教材:

    教材

    你可以把学习时要用到的教材一一记录进去。每本教材可以进行设定(下图中的“勉强”,日文中的意思就是“学习”),除了贴标签以便查询和统计,还可以设定学习量的单位,比如页或章。

    教材设定

    下面点击教材进入学习状态,对于GTD来说,每一次学习相当于执行一个子任务:

    学习

    类似蕃茄钟的设定。但没有蕃茄钟那种必须事先设定好学多久才肯开始干的尿性。

    中间可以随时暂停,学习结束后点“终了”,来到记录页面:

    记录

    当前这本教材学习用了多少时间,学了多少内容(章节或页,或其他你觉得方便统计的单位),都可以记录在案。如上图所说(图不是舍得抓的,是借的,借的),程序还能记录下你这次学到了第几章,下次直接接着搞就OK。

    接下来是统计功能闪亮登场:

    统计1

    我们还可以按分类(科目)进行统计,比如图中的GMAT不止是一本书:

    统计2

     

    如果觉得这个数据对你没啥触动,来看看某学霸级用户的记录:

    半年统计

     

    这样的数据,对使用者自己来说,本身就是一种强有力的激励。

    都说了这只是一个参照范本,舍得想做的MTD,除了将结合GTD在处理随机、分散性事务上的优势之外,还将在数据分析上进一步深挖,比如,不同时段之间学习效率的对比,特定时段不同教材、科目之间所用时间的占比,这些数据的挖掘和分析,可以帮助我们找出已完成事务的缺失或不足,从而更好地规划下一步的学习和工作。

     

    本文版权归舍得学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
    作者:舍得
    首发:舍得新浪博客

    标签: