像科学家一样思考python_像计算机科学家一样思考python笔记

[TOC]

#1 程序之道

##1.1 Python程序语言

- 有两种程序可以让高级语言转换为低级语言,分别是直译器和编译器.

- 有两种方式使用python的直译器:shell模式和脚本模式.

##1.8 形式语言和自然语言

- 自然语言是人们所说的语言。

- 形式语言是人们为特定的应用设计的语言

*程序语言是设计来呈现计算的形式语言*

语法规则分为两种,分别属于标记和结构。标记是程序语言的基本组件,就像字词、数字和化学元素一样;

结构是标记的排列方法。

> 当你阅读英文句子或者是形式语言的陈述,你必须理解句子的结构是什么,这种过程叫分析。

**歧义性:**自然语言充满了歧义

**冗赘性:**自然语言为了弥补歧义以及减少误解,使用了大量的赘词。

**字面性:**自然语言充满成语和隐喻。

***

#2 变量、表达式以及陈述(print)

##2.1 数值和型态

- 2是数值, "chess"是字符串.

```python

>>> print ‘chess‘

chess

>>> type(3.2)

```

##2.3 变量名称与关键字

- **变量名称**可以为任意长度,也可以同时包含字母与数字. 但是必须以字母开头

python有`31`个关键字

|and|del|from|not|while|

|:----|:---|:----|:---|:----|

|as|elif|global|or|with|

|assert|else|if|pass|yield|

|break|except|import|print|class|

|exec|in|raise|continue|finally|

|is|return|def|for|lambda|

|try|

##2.5 表达式求值

令人迷惑的是,求取表达式的值和打印一个数值不完全相等

```python

>>> message="oh, shit"

>>> message

‘oh, shit‘

>>> print message

oh, shit

>>>

```

##2.9 输入

Python有两个内建函数可以取得键盘的输入数据:

```python

>>> n=raw_input(‘请输入你的姓名:‘)

请输入你的姓名:lifeng

>>> print n

lifeng

>>> n=input(‘请输入一个数字表达式:‘)

请输入一个数字表达式:3*9

>>> print n

27

>>> n=raw_input(‘请输入一个表达式:‘)

请输入一个表达式:3*8

>>> print n

3*8

```

input输入的是表达式

***

#3 函数

## 3.1 函数的定义及用法

- 在程序设计的范畴内,函数是一个有名称的语句序列,用来执行所需的运算。

在python中,函数定义的语法为:

```python

def name(List of PARAMETERS):

STATEMENTS

```

##3.3 参数、自变量以及import语句

- 另一个接受一个以上自变量的内建函数是max

```python

>>> max(7,11,4,23,93)

93

```

- import关键字

我们可以使用import语句来将我们在脚本中定义的函数汇入直译式程序中。

我们先假设print_twice函数被定义在chap03.py中

```python

>>> from chap03 import *

>>> print_twice(‘lifeng‘)

lifeng lifeng

>>> print_twice(5)

5 5

>>>

```

***

#4 条件表达式

##4.2 布尔值与表达式

布尔值只有两种True和False

```python

>>> type(True)

>>> type(False)

>>> type(true)

Traceback (most recent call last):

File "", line 1, in

NameError: name ‘true‘ is not defined

```

##4.3 逻辑运算符

- 逻辑运算符有三个and、or、not

##4.4 条件执行

if语句

```python

if x > 0:

print "x is positive"

```

##4.10 类型转换

```python

>>> int(-2.33)

-2

>>> int(-2.5)

-2

>>> int(-2.6)

-2

>>> int(3.6)

3

>>> str(32)

‘32‘

>>> bool(1)

True

>>> bool("!no")

True

>>> bool("")

False

```

***

# 5 多效函数

## 5.1 返回值

有返回值的函数, 我们称之为多效函数(fruitful function)

##5.5 函数的型态

```python

>>> def funcccc():

... return "this is a function"

...

>>> type(funcccc)

>>>

```

##5.7 三引号字符串

```python

>>> print ‘‘‘mariy said:"you are so fool", maria replyed:"you know‘function‘"‘‘‘

mariy said:"you are so fool", maria replyed:"you know‘function‘"

>>> print ‘‘‘mariy said:"you are so fool",

... maria replyed:"you

... know‘function‘"‘‘‘

mariy said:"you are so fool",

maria replyed:"you

know‘function‘"

>>> print """mary you said:"you nothing", maria replyed:

... "so you know"."""

mary you said:"you nothing", maria replyed:

"so you know".

```

三引号字符串,可以在其中输入双引号以及单引号。

##5.8 使用doctest做单元测试

***

#6 重复

##6.1 多重指派

```python

a=5

b=a #a和b现在相等

a=3 #a和b现在不相等了

```

##6.2 更新变量

##6.3 while语句

```python

def coutdown(n):

while n > 0:

print n

n = n -1

print "Blastoff!"```

##6.9 封装与一般化

封装是将一段程序代码包裹进函数的过程,这让你可以充分利用函数的所有优点。

一般化就是加参数。

***

#7. 字符串

##7.1 复合数据型态

到目前为止我们已经看过五种型态: `int`、`float`、`bool`、`NoneType`、以及`str`.```python

>>> fruit="banana"

>>> letter=fruit[1]

>>> print letter

a

>>> len(fruit)

6

```

##7.3 走访以及for循环

```python

index=0

while index < len(fruit):

letter = fruit[index]

print letter

index += 1

```

##7.4 字符串切片

```

>>> s="Peter jackson, all you done is great"

>>> print s[0:5]

Peter

>>> print s[6:13]

jackson

```

如果你省略了第一个索引,切片将会在字符串的起点开始,如果你省略了第二个索引,切片将会以字符串的末端作为结束。

##7.5 字符串比较

比较运算符一样可以运用在字符串上,为了确认两个字符串是否相等。

```python

if word == "banana":

print "Yes, we have no bananas!"

if word < "banana":

print "Your word, " + word + ", comes before banana."

elif word > "banana":

print "Your word, " + word + ", comes after banana"

else:

print "Yes, we have no bananas"

```

##7.7 in运算符

```python

>>> ‘p‘ in ‘person‘

True

>>> ‘a‘ in ‘person‘

False

>>> ‘er‘ in ‘person‘

True

```

##7.10 选择性参数

```python

def find(string, ch, start=0)

```

##7.11 string模块

```python

>>> import string

>>> dir(string)

[‘Formatter‘, ‘Template‘, ‘_TemplateMetaclass‘, ‘__builtins__‘, ‘__doc__‘, ‘__file__‘, ‘__name__‘, ‘__package__‘, ‘_float‘, ‘_idmap‘, ‘_idmapL‘, ‘_int‘, ‘_long‘, ‘_multimap‘, ‘_re‘, ‘ascii_letters‘, ‘ascii_lowercase‘, ‘ascii_uppercase‘, ‘atof‘, ‘atof_error‘, ‘atoi‘, ‘atoi_error‘, ‘atol‘, ‘atol_error‘, ‘capitalize‘, ‘capwords‘, ‘center‘, ‘count‘, ‘digits‘, ‘expandtabs‘, ‘find‘, ‘hexdigits‘, ‘index‘, ‘index_error‘, ‘join‘, ‘joinfields‘, ‘letters‘, ‘ljust‘, ‘lower‘, ‘lowercase‘, ‘lstrip‘, ‘maketrans‘, ‘octdigits‘, ‘printable‘, ‘punctuation‘, ‘replace‘, ‘rfind‘, ‘rindex‘, ‘rjust‘, ‘rsplit‘, ‘rstrip‘, ‘split‘, ‘splitfields‘, ‘strip‘, ‘swapcase‘, ‘translate‘, ‘upper‘, ‘uppercase‘, ‘whitespace‘, ‘zfill‘]

>>> type(string.digits)

>>> type(string.find)

>>> print string.digits

0123456789

>>> print string.find.__doc__

find(s, sub [,start [,end]]) -> in

Return the lowest index in s where substring sub is found,

such that sub is contained within s[start,end]. Optional

arguments start and end are interpreted as in slice notation.

Return -1 on failure.

>>> string.find("banana","na")

2

>>> string.find("bob","b", 1,2)

-1

```

##7.12 字符的分类

```python

>>> print string.lowercase

abcdefghijklmnopqrstuvwxyz

>>> print string.uppercase

ABCDEFGHIJKLMNOPQRSTUVWXYZ

>>> print string.whitespace

>>>

```

string.whitespace中包含空格、tab(\t)、新行(\n)

##7.13 字符串的格式化

```

>>> "His name is %s." % "Arthur"

‘His name is Arthur.‘

>>> name="lifeng"

>>> age=30

>>> "I am %s and I am %d years old" % (name,age)

‘I am lifeng and I am 30 years old‘

```

***

#9 tuple(元组)

##9.1 可变性与tuple

字符串是不可变型的, 但是列表是可变型的。

python还有一个称谓tuple的型态。它和列表非常相似,只不过它是不可变的。

从语法上说tuple是一系列用逗号分隔的值, 一个元素的tuple必须在最后加上一个逗号,否则会被当成字符串:

```

>>> tuple=‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘

>>> type(tuple)

>>> t1=(‘a‘, ‘b‘)

>>> t2=(‘a‘,)

>>> type(t2)

>>> t3=(‘a‘)

>>> type(t3)

>>> tuple[0]

‘a‘

>>> tuple[1:3]

(‘b‘, ‘c‘)

```

##9.2 tuple指派

数值交换,传统的写法

```

>>> a=10

>>> b=20

>>> temp=a

>>> a=b

>>> b=temp

>>> a

20

>>> b

10

```

tuple指派的写法

```

>>> a=10

>>> b=20

>>> a,b=b,a

>>> a

20

>>> b

10

```

三值互换:

```

>>> a,b,c=10,20,30

>>> a,b,c=c,a,b

>>> a

30

>>> b

10

>>> c

20

```

##9.4 随机数字

random在数学上说并不是真正随机的。但是可以满足我们日常的要求:

```

>>> import random

>>> for i in range(10):

... x = random.random()

... print x

...

0.684719929612

0.0464362929874

0.395376767428

0.800637456994

0.99066361106

0.765716907162

0.989860584657

0.413398095796

0.935161433805

0.0607366842634

```

***

#10. 字典

***

#11. 文件和异常

当一个程序运作的时候,它的数据会在内存中,当这个程序结束的时候,数据就会丢失,要存储就应该将这些放入一个档案中。

```

>>> f=open("test.dat", "w")

>>> print f

>>>

```

写文件

```

>>> f.write("now learning python")

>>> f.write("now stop writing python")

>>> f.close()

```

读文件。 f.read()会读取文件的全部内容

```

>>> f=open("test.dat", "r")

>>> text = f.read()

>>> print text

new line

>>>

```

原文地址:http://www.cnblogs.com/kakafra/p/fac8cf9cd1a45398520e4a41c9ebbadb.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介 · · · · · · 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程。贯穿全书的主体是如何思考、设计、开发的方法,而具体的编程语言,只是提供了一个具体场景方便介绍的媒介。 全书共21章,详细介绍Python语言编程的方方面面。本书从基本的编程概念开始讲起,包括语言的语法和语义,而且每个编程概念都有清晰的定义,引领读者循序渐进地学习变量、表达式、语句、函数和数据结构。书中还探讨了如何处理文件和数据库,如何理解对象、方法和面向对象编程,如何使用调试技巧来修正语法错误、运行时错误和语义错误。每一章都配有术语表和练习题,方便读者巩固所学的知识和技巧。此外,每一章都抽出一节来讲解如何调试程序。作者针对每章所专注的语言特性,或者相关的开发问题,总结了调试的方方面面。 本书的第2版与第1版相比,做了很多更新,将编程语言从Python 2升级成Python 3,并修改了很多示例和练习,增加了新的章节,更全面地介绍Python语言。 这是一本实用的学习指南,适合没有Python编程经验的程序员阅读,也适合高中或大学的学生、Python爱好者及需要了解编程基础的人阅读。对于首次接触程序设计的人来说,是一本不可多得的佳作。 作者简介 · · · · · · [美] 艾伦 B. 唐尼(Allen B. Downey) Allen Downey是欧林工程学院的计算机科学教授,曾任教于韦尔斯利学院、科尔比学院和加州大学伯克利分校。他是加州大学伯克利分校的计算机科学博士,并拥有MIT的硕士和学士学位。 译者介绍 赵普明 毕业清华大学计算机系,从事软件开发行业近10年。从2.3版本开始接触Python,工作中使用Python编写脚本程序,用于快速原型构建以及日志计算等日常作业;业余时,作为一个编程语言爱好者,对D、Kotlin、Lua、Clojure、Scala、Julia、Go等语言均有了解,但至今仍为Python独特的风格、简洁的设计而惊叹。 目录 · · · · · · 第1章 程序之道 1 1.1 什么是程序 1 1.2 运行Python 2 1.3 第一个程序 3 1.4 算术操作符 3 1.5 值和类型 4 1.6 形式语言和自然语言 5 1.7 调试 6 1.8 术语表 7 1.9 练习 8 第2章 变量、表达式和语句 9 2.1 赋值语句 9 2.2 变量名称 9 2.3 表达式和语句 10 2.4 脚本模式 11 2.5 操作顺序 12 2.6 字符串操作 13 2.7 注释 13 2.8 调试 14 2.9 术语表 15 2.10 练习 16 第3章 函数 17 3.1 函数调用 17 3.2 数学函数 18 3.3 组合 19 3.4 添加新函数 19 3.5 定义和使用 21 3.6 执行流程 21 3.7 形参和实参 22 3.8 变量和形参是局部的 23 3.9 栈图 23 3.10 有返回值函数和无返回值函数 24 3.11 为什么要有函数 25 3.12 调试 26 3.13 术语表 26 3.14 练习 27 第4章 案例研究:接口设计 30 4.1 turtle模块 30 4.2 简单重复 31 4.3 练习 32 4.4 封装 33 4.5 泛化 34 4.6 接口设计 34 4.7 重构 35 4.8 一个开发计划 36 4.9 文档字符串 37 4.10 调试 38 4.11 术语表 38 4.12 练习 39 第5章 条件和递归 41 5.1 向下取整除法操作符和求模操作符 41 5.2 布尔表达式 42 5.3 逻辑操作符 42 5.4 条件执行 43 5.5 选择执行 43 5.6 条件链 44 5.7 嵌套条件 44 5.8 递归 45 5.9 递归函数的栈图 46 5.10 无限递归 47 5.11 键盘输入 47 5.12 调试 48 5.13 术语表 49 5.14 练习 50 第6章 有返回值的函数 53 6.1 返回值 53 6.2 增量开发 54 6.3 组合 56 6.4 布尔函数 57 6.5 再谈递归 58 6.6 坚持信念 59 6.7 另一个示例 60 6.8 检查类型 60 6.9 调试 61 6.10 术语表 63 6.11 练习 63 第7章 迭代 65 7.1 重新赋值 65 7.2 更新变量 66 7.3 while语句 66 7.4 break语句 68 7.5 平方根 68 7.6 算法 70 7.7 调试 70 7.8 术语表 71 7.9 练习 71 第8章 字符串 73 8.1 字符串是一个序列 73 8.2 len 74 8.3 使用for循环进行遍历 74 8.4 字符串切片 75 8.5 字符串是不可变的 76 8.6 搜索 77 8.7 循环和计数 77 8.8 字符串方法 78 8.9 操作符in 79 8.10 字符串比较 79 8.11 调试 80 8.12 术语表 82 8.13 练习 82 第9章 案例分析:文字游戏 85 9.1 读取单词列表 85 9.2 练习 86 9.3 搜索 87 9.4 使用下标循环 88 9.5 调试 90 9.6 术语表 90 9.7 练习 91 第10章 列表 93 10.1 列表是一个序列 93 10.2 列表是可变的 94 10.3 遍历一个列表 95 10.4 列表操作 95 10.5 列表切片 96 10.6 列表方法 96 10.7 映射、过滤和化简 97 10.8 删除元素 98 10.9 列表和字符串 99 10.10 对象和值 100 10.11 别名 101 10.12 列表参数 102 10.13 调试 103 10.14 术语表 104 10.15 练习 105 第11章 字典 108 11.1 字典是一种映射 108 11.2 使用字典作为计数器集合 110 11.3 循环和字典 111 11.4 反向查找 111 11.5 字典和列表 112 11.6 备忘 114 11.7 全局变量 115 11.8 调试 117 11.9 术语表 118 11.10 练习 119 第12章 元组 121 12.1 元组是不可变的 121 12.2 元组赋值 122 12.3 作为返回值的元组 123 12.4 可变长参数元组 124 12.5 列表和元组 124 12.6 字典和元组 126 12.7 序列的序列 127 12.8 调试 128 12.9 术语表 129 12.10 练习 129 第13章 案例研究:选择数据结构 132 13.1 单词频率分析 132 13.2 随机数 133 13.3 单词直方图 134 13.4 最常用的单词 135 13.5 可选形参 136 13.6 字典减法 137 13.7 随机单词 138 13.8 马尔可夫分析 138 13.9 数据结构 140 13.10 调试 141 13.11 术语表 142 13.12 练习 143 第14章 文件 144 14.1 持久化 144 14.2 读和写 144 14.3 格式操作符 145 14.4 文件名和路径 146 14.5 捕获异常 147 14.6 数据库 148 14.7 封存 149 14.8 管道 150 14.9 编写模块 151 14.10 调试 152 14.11 术语表 152 14.12 练习 153 第15章 类和对象 155 15.1 用户定义类型 155 15.2 属性 156 15.3 矩形 157 15.4 作为返回值的实例 158 15.5 对象是可变的 159 15.6 复制 159 15.7 调试 161 15.8 术语表 161 15.9 练习 162 第16章 类和函数 163 16.1 时间 163 16.2 纯函数 164 16.3 修改器 165 16.4 原型和计划 166 16.5 调试 167 16.6 术语表 168 16.7 练习 168 第17章 类和方法 170 17.1 面向对象特性 170 17.2 打印对象 171 17.3 另一个示例 172 17.4 一个更复杂的示例 173 17.5 init方法 173 17.6 _ _str_ _方法 174 17.7 操作符重载 175 17.8 基于类型的分发 175 17.9 多态 177 17.10 接口和实现 177 17.11 调试 178 17.12 术语表 179 17.13 练习 179 第18章 继承 181 18.1 卡片对象 181 18.2 类属性 182 18.3 对比卡牌 183 18.4 牌组 184 18.5 打印牌组 185 18.6 添加、删除、洗牌和排序 185 18.7 继承 186 18.8 类图 188 18.9 数据封装 189 18.10 调试 190 18.11 术语表 191 18.12 练习 191 第19章 Python拾珍 194 19.1 条件表达式 194 19.2 列表理解 195 19.3 生成器表达式 196 19.4 any和all 197 19.5 集合 197 19.6 计数器 199 19.7 defaultdict 200 19.8 命名元组 201 19.9 收集关键词参数 202 19.10 术语表 203 19.11 练习 203 第20章 调试 205 20.1 语法错误 205 20.2 运行时错误 207 20.2.1 我的程序什么都不做 207 20.2.2 我的程序卡死了 207 20.2.3 无限循环 208 20.2.4 无限递归 208 20.2.5 执行流程 208 20.2.6 当我运行程序,会得到一个异常 209 20.2.7 我添加了太多print语句,被输出淹没了 210 20.3 语义错误 210 20.3.1 我的程序运行不正确 211 20.3.2 我有一个巨大而复杂的表达式,而它和我预料的不同 211 20.3.3 我有一个函数,返回值和预期不同 212 20.3.4 我真的真的卡住了,我需要帮助 212 20.3.5 不行,我真的需要帮助 212 第21章 算法分析 214 21.1 增长量级 215 21.2 Python基本操作的分析 217 21.3 搜索算法的分析 218 21.4 散列表 219 21.5 术语表 223 译后记 224

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值