一、程序设计基础
1、Python历史
2、Python特点
Python的伪代码(形式语言)更接近于自然语言(自然语言)
胶水语言
3、Python的应用:Google、Youtube等
4、IDE
1)Python是解释性语言(“同声传译”),支持有两种方法使用解释器:交互式模式(interactive
mode)和脚本模式(script mode)。
(1)交互模式:退出exit()
(2)脚本模式:
三种代码格式:源代码py 字节代码pyc 优化代码pyo
代码注释行用#符号开始(用法同C++的//)
注释块:两个三双引号(""")内的代码
2)Spyder集成编程环境
5、基本输入输出语句
①屏幕行输出函数:
(,,...),Python2不需要括号。输出占一行。
print后面参数以逗号结尾,则输出变量值后不换行
print后面无参数,则输出一空行。
②键盘输入函数:
Python2和3中input(['']),接收键盘输入,并返回表达式;
Python2中raw_input
(['']),返回值是键盘输入的字符串(若用为数字则需强制类型转换);
input()等价于eval_r(raw_input())。
Python可以一边输入一边赋值。如
num1=int(raw_input())
二、常量变量
1、和C语言相似的转义字符
\n换行newline \'单引号
2、变量名是大小写敏感的,变量名的命名原则也符合一般的标示符规则;变量在使用前必须已经定义(先定义再使用)
Python的变量赋值(变量绑定对象),实际上是将值指向址,同一个值指向同一个址,而址可以映射不同的变量名。这是与其他语言区别的地方
三、数据类型
1、数据类型函数:type()
整数(integer):十进制21 八进制025
十六进制0x15
浮点数(float):1.65 2. .21 2.1E2
布尔数(boolean):布尔值(True False),注意大小写
复数(complex):1+2i
字符串(string):使用单引号、双引号或三引号括起来。三引号(''')括起来时,保留了字符串中的全部信息,包括回车。
2、Python并不需要使用变量前先要类型声明,但在使用前还是需要先初始化赋值
3、类型转换
和C一样,计算中也有自动类型转换:bool→int→float→complex
Python也支持强制类型转换: (),如int
('32'),int(3.9)等(类型转化的类型名不用加小括号,这与C不同)
四、运算符(按运算符优先级排列;除特别声明多为左结合性)
1、算术运算符:
**(乘方,即指数运算,右结合性,如2**2**3==256,而不是64)
*
/(除,除不尽结果用double型输出)
%取余 #(3.0以上版本,除,结果向下取整floor division)
+ -
加减乘除甚至可以用于字符串运算(级联),例如:'very'+'good'、'repeap'*3等
2、关系运算符
①>大于 =大于等于 <=小于等于
==等于 !=(或<>)不等于
②Python与C不一样的是,它可以这样写一个关系表达式1 < a
< 2
3、逻辑运算符
①not逻辑否 and逻辑与 or逻辑或
②逻辑运算的结果是逻辑常量True、False,但在表达式中所有非0数都被运算为True。有些与C不同的:
123 and 456 --> 456
123 or 456 -->123
4、赋值运算符(右结合性)
①= *= /= += -= %= //=
注意Python不支持C语言的自增自减
②Python支持这样的赋值写法:
a,b=1,2
a,b,c=eval_r(raw_input("输入三个数")) #eval用于转换字符为表达式
五、表达式
Python表达式和语句不同,表达式具有一个值,语句没有。
a+1是表达式
a=1是语句
六、控制结构流程图
一)顺序
二)分支
1、if :
elif :
else:
(和C语言不同的是)if、elif、else后面的表达式不用小括号括起来,表达式后面的语句组也不需要用大括号{}括起来(用强制缩进表示程序块),这意味着Python是以一行表示一个语句的(一行上语句过长,可用_续行);若if体中暂没有语句,可用pass占位;语句体只有一句,则可以喝if、elif或else合并为一行
if、elif、else按序检查,若满足其中一个条件,就执行,之后的就跳出if体。
2、条件赋值
=a,if else b
条件成立时,变量值为a,否则为b
三)循环
循环,一般由循环初始值、循环条件、循环动作、更新循环条件等组成
1、while循环和for循环(和C不同)
①while :
else:
②for in
range([,][,]):
else:
for用于已知次数的循环
2、for和while的转换
for和while还是有一些区别的,for是遍历数组值,while则是逻辑值
错在哪里?
右边的while循环,i的终值被多加了1个步长
3、循环控制(和C相同)
break跳出当前循环
continue跳出当次循环
七、函数
一)内置函数——模块
import
math这样的语句用于导入模块(类似C中的头文件、库文件)
●模块中有哪些对象方法属性,可用dir函数,dir
()
●模块的使用,类似于对象的属性、方法的调用(即“点记法”),如math.pi、math.sin()、math.log10()
●此外,还可以用from import
*,来导入模块中所有的对象,在使用时就可以直接使用,不需加和点
import math.tan [as
tg]则引入math中的tan,[并重命名为tg]
二)自定义函数
def ( )
返回值return 。
函数可以有1个或更多个形参,也可以无形参(但括号不能省);形参的作用域为local,可以用global来声明全局变量。
与C不同的一些地方:
①函数在使用前必须已经定义,但在使用前无需像有些高级语言那样声明
②参数指定
关键字赋值:在调用时指出,这样引用时就不受形参位置的影响
函数体内定义另一个函数,并调用。例如定义了一个函数f(big,small),调用时可以这样引用f(small=1,big=3)
缺省参数:
三)递归
一个函数使用时可以调用另一个函数,同样一个函数也可以调用它自己,这就是“递归”。
生活中的递归如老和尚讲故事、德罗斯特效应、两面相对的镜子等;数学上可以用递归编程的有阶乘、斐波那契数列、汉诺塔等。
一个递归函数一般由递归条件(“递”)和递归出口(“归”)构成;递归编程的口诀“掐头去尾留中间”
八、算法
九、数据结构
I、字符串String
一)字符串函数
长度:len()
拼接: +
重复: *n
成员运算符(是否包含,返回True、False): in
遍历: for c in :
二)字符数组的概念和使用
1、
[]
方括号[ ]就是索引运算符
索引号从0开始(整数第一个字符),负索引号从-1开始,即从字符串倒数第一个
2、切片:使用冒号可以引用索引号前后之间的字符串
[start:finish],start:子序列开始位置的索引值 finish:子序列结束位置的下一个字符的索引值
[start:finish:countBy] 间隔切片,countBy缺省为1
my_str='hello world'
my_str[0:11:2]
-->'hlowrd'
countBy为-1时可获得逆字符串
my_str='world'
my_str[::-1]
-->'dlrow' #my_str==my_str[::-1]用于判断单词是否回文
3、不能用字符串索引来改变字符串的值
my_str='hello world'
my_str[1]='l' #错误
但可以使用切片、拼接等方式,如
my_str=my_str[:1]+'a'+str[2:]
三)字符串方法
替换:replace(old,new)
my_str='hello'
my_str.replace('e','a')
-->'hallo'
注意replace方法并没有改变字符串的值,只是输出一个替换的字符串,原字符串还是'hello'
可以用dir(str)查看字符串的更多属性方法
四)字符串比较
可以对两个字符串关系运算,比较ASCII顺序
五)字符串格式化与正则表达式
II、文件File
一)文件打开和关闭
f=open('')
f.close
二)遍历文件行
f=open('names.txt')
for line in f:
f.close
III、列表List
一)=[,,...] ,列表有点像数组,但列表中的元素可以是不同类型的。
和字符串一样,可以通过下标、索引、切片等来引用列表元素,用法也相似,同样支持长度、拼接、重复、成员运算等。但和字符串不同的,列表及其元素是可以改变的。
二)列表内建方法
.append #在列表末尾追加一个元素,相当于列表做加法(+)
.expend([]) #在列表末尾追加一个列表
.insert(,)
.pop() #从后删除一个元素
.remove() #删除指定元素值
.sort() #元素排序
.reverse(() #元素逆序
.swap(,,) #交换元素
三)遍历算平均
for num in :
s+=num
avg=s/len()
四)列表内建函数
sum() #求数值列表的和
max
min
五)查找和排序
1、线性查找
.index() #线性查找元素第一次在列表中出现的位置,若找到返回该值的索引号,反之返回出错信息
线性查找的时间复杂度为O(n)
.find() #类似index,但不同的是找不到子字串时返回-1
2、二分查找
二分查找要先排序
二分查找的时间复杂度为O(log2n)
3、选择排序
即每次遍历将最小值剪切到前面(或将最小值与初始最前面元素交换)
选择排序时间复杂度为O(n2)
4、冒泡排序
每一次遍历都将小值排前,大值排后,循环一次以后,最大的元素被“沉底”;
这样的循环遍历直到遍历时找不到小值在后的元素(即lst(i)>lst(i+1)始终不成立。
冒泡排序的时间复杂度也是O(n2) ,但实际运行时冒泡法往往比选择排序时间少,因为冒泡排序法通常执行的比较操作更少
5、使用内建的排序函数和方法
sorted() 和 .sort() #返回一个拍好序(默认升序)的列表(源列表不变)。它使用了快速排序算法(quicksort),其时间复杂度O(nlogn)
内建排序后面省略了两个参数(key=,reverse=),reverse的缺省值即False
六)嵌套列表(二维列表)
列表 lst = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
这是一个三行四列的嵌套列表
若访问第三行、第二列lst [2][1]
len(lst)的结果是3(“行数”),不是12(总元素个数)
那么如何知道列表的列数呢?len(lst[0])、len(lst[1])、len(lst[2])均可
七)列表推导
lst=[x**2 for x in range(1,10)]
IV、元组Tuple
相当于不可变的列表,用小括号来建立元祖
可以使用索引、切片、len、print、index等方法;不可以使用append、extend、del等
V、字典Dict
1、用大括号来建立字典,字典元素由不可重复的键和值构成;键必须是不可变的且不重复(如整型、浮点型、元祖等不可变类型),值可以是任意类型(如列表等也可以)
my_dict{'Tom':78,'Jim':89,'Mary':80}
2、字典元素存储时并不按输入先后顺序排列,也不按字母顺序排列,所以字典不支持排序。因此,引用字典时应使用键名引用: my_dict['Jerry']=99
3、字典也支持长度函数len、成员运算符in(判断一个“键”是否在字典中,它的时间复杂度为O(1),相比较字符串和列表的O(n),速度更快)等,此外字典还支持以下方法
.items() #获取全部的键-值对
.keys() #获取全部的键
.values() #获取全部的值
.clear() #清空字典
VI、集合Set
1、无序不重复元素(键)值。相当于没有值只有键的字典(所以也可以用{
}建立集合,集合的元素类似于字典的键,其类型应是不可变不重复的,如整型、浮点型、元祖等);和字典一样,集合也没有顺序,不支持排序。
2、集合的创建,使用set函数
x=set()
集合的添加add方法和删除remove方法
x.add('body')
x.remove('body')
3、集合的运算符
& 交集
| 并集
- 差集
== 等于
!= 不等于
in 成员
for key
in set 枚举
VII、类和对象
十、GUI简介
GUI的第三方API库:TKinter、wxPython、PyQt、PyGtk等
from Tkinter import
* #导入GUI库
def changeRelief( )
root=Tk( ) #建立控件
label1=Label(root,text="Hello")
button1=Button(root,text="OK",command=changeRelief) #command=changeRelief事件处理绑定
label.pack( )
button1.pack( )
root.mainloop( )
十二、数据库
数据库管理系统(DataBase Management System,DBMS)
商业系统:Oracle、Microsoft SQL Server、IBM DB2等
开源(Open Source)系统:MySQL、PostgreSQL、SQLite等
其中,SQLite3版本的基本用法:
1、安装:将zip解压即可
2、创建或打开数据库
sqlite3
test.db
3、创建一个表creat
sqlite > creat table
(name,num,phone)
4、插入一行(记录)
sqlite > insert into
values('Zhang',1,'13150201234');
5、查询
select from
select from where
id=
select from where id
like
6、删除delete
delete from
7、修改update
update set Attribue=NEW
8、在Python中使用SQLite3
import sqlite3
con=sqlite3.connect('test.db')
cur=con.cursor() #创建一个游标
cur.execute('select * from student')
rows=cur.fetchall()
for row in rows:
print row
十三、Web编程基础
Django
1、安装
python setup.py install
>djang-admin.py startproject mysite
2、运行
>python manage.py runserver
3、创建应用
python manage.py startapp addr_book
编辑addr_book
4、模板
HTML语言
模板不是必须的,可以将HTML代码写在视图中,但是这样不便于改动和分工(可以由专门的美工负责设计网页)。
5、模型
数据库
HTML表单
模型不是必须的,可以将数据库操作代码写在视图中,但是这样不便于切换到新的数据库,需要针对新的数据库修改代码。有了模型,切换数据库仅需要修改
settings.py 即可。
【相关网站】