一、一些引子
1、使用文本编辑器编写与执行程序
(1)使用文本编辑器,例如Sublime Text进行编写。完成后选择一个目录进行保存,如c:\work,如把文件保存为hello.py.
(2)运行程序时,先打开命令行窗口(cmd),将当前目录切换到hello.py的目录,即可运行。
运行hello.py是>python hello.py命令,如果当前目录不是hello.py的存放目录会报错,切换目录使用cd命令:>cd C:\work。而后可以用>dir查看当前目录的内容,>more hello.py可以查看hello.py的内容。
因此,用文本编辑器写python程序,完成后保存为后缀为.py的文件,就可以通过cmd运行这个文件了。
2、输入和输出
(1)输出
print()函数是python的输出函数,写法如:python('hello world')
print()函数还可以接受多个字符串,用逗号‘,’隔开即可。打印时遇到逗号‘,’会输出一个空格,如print('hello','world')的输出结果为:hello world
(2)输入
input()函数是python的输入函数,用法如:*name=input()*可以让用户进行输入,并存放到name变量里。如果想要打印变量name的内容,用print(name)即可。
二、python基础
1、数据类型和变量
(1)整数:Python可以处理任意大小的整数,包括负整数。计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示。
(2)浮点数:浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的。把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
(3)字符串:字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz"等等。如果字符串内部既包含'又包含",可以用转义字符\来标识,比如:'I\'m \"OK\"!'。如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义。
(4)空值:空值是python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
(5)除法:在python中,有两种除法,一种是/,这种除法的结果均为浮点数,是精确的除法。另一种除法是//,称为地板除,两个整数相除的结果仍然是整数,该种除法只取结果的整数部分。%是取余。
(6)**运算:进行幂运算: print(100**2) 输出结果是10000.
2、编码
(1)ASCII编码是美国人发明的,只包括英文字母、数字和一些符号,共127个字符,用1字节(byte)即可表示。但是处理中文一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以中国制定了GB2312编码,将中文编进去。相似,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
(2)现代操作系统和大多数编程语言都直接支持Unicode,通常用两个字节表示一个字符(偏僻的字符就需要4个字节)。
(3)ASCII编码和Unicode编码的区别:ASCII编码是1个字节,Unicode通常是两个字节。
(4)Unicode的出现也带来了一些问题:统一为Unicode编码,乱码问题可以解决。但是如果一个文本全是英文,用Unicode编码就比ASCII编码多一倍的存储空间,在存储和传输上就变得不划算。
(5)为了解决(4)的问题,出现了“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
(6)在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码;用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件;浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器,所以可以看到很多网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。
3、字符串
(1)在最新的python3版本中,字符串是以Unicode编码的,所以python的字符串支持多语言。
(2)ord()函数可以获取字符的整数表示,如ord('A'),结果为65.ord('中'),结果为20013;chr()函数可以把编码转换成对应的字符,如chr(20013)d的结果为‘中’。
(3)以Unicode表示的str通过encode()方法可以编码为指定的bytes,如'ABC'.encode('ascii'); '中文'.encode('utf-8')。反过来,要把bytes变为str,就需要用decode()方法,如 b'ABC'.decode('ascii')
(4)由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
注意:申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码:通常在文本编辑器的encoding栏下。
4、使用list
(1)list:列表。list是一种有序的集合,可以随时添加和删除其中的元素,是可变的有序表。如列出班级中所有同学的名字,可以用一个list表示:
classmates=['Michael','Bob','Tracy']
当然,list中的元素的数据类型可以不同,甚至可以内嵌list:
L=['apple',123,True] s=['python','java',['asp','php'],'scheme']
要获取'php': s[2][1]
(2)用索引获取list的元素
用len()函数可以获得list元素的个数:
len(classmates)
用索引来访问list中每一个位置的元素,记得索引是从0开始的:
classmates[0]
classmates[2]
用索引倒着取元素,可以:
classmates[-1]
classmates[-3]
(3)添加和删除
用append()函数可往list中追加元素至末尾:
classmates.append('Adam')
用insert()函数可将元素插到list的指定位置,如索引号为1的位置:
classmates.insert(1,'Adam')
用pop()函数可删除list末尾的元素:
classmates.pop()
用pop(i)可删除指定位置的元素,其中i是索引位置:
classmates.pop(2)
替换list中的某个元素,可直接对相应位置赋值:
classmates[1] = 'Sarah'
5、使用tuple
tuple:元组。类似于list,也是一种有序列表,但与list的区别:tuple一旦初始化就不能修改。
(1)创建元组:
classmates = ('Michael', 'Bob', 'Tracy')
注意:若定义只有一个元素的tuple,为消除歧义,必须加一个逗号,
t = (1,)
(2)获取tuple的元素:
classmates[0]
classmates[-1]
6、条件判断
条件判断的完整形式:
if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4>
具体如:
age = 20 if age >= 6: print('teenager') elif age >= 18: print('adult') else: print('kid')
7、循环
python的循环有两种,一种是for...in循环;另一种是while循环。
(1)for...in循环
使用for...in循环,依次把list或tuple中的每个元素迭代出来:
#计算1-10的整数之和 sum = 0 for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: sum = sum + x print(sum)
range()函数:生成一个整数序列。可再通过list()函数转换为list。注意:list(x)生成的整数是从0开始到x-1。
#计算1-100的整数之和 sum = 0 for x in range(101): sum = sum + x print(sum)
(2)while循环:条件满足,就不断循环,直到不满足循环条件。
#计算100以内所有奇数之和 sum = 0 n = 99 while n > 0: sum = sum + n n = n - 2 print(sum)
下面讨论break和continue:
(1)break:执行循环时,遇到break就提前退出循环。
(2)continue:执行循环时,遇到continue就跳过当前循环,直接开始下一次循环。
这两个语句通常都必须配合if语句使用。
8、dict
dict:字典,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
#创建一个“名字”-“成绩”的dict d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} #获取Michael的成绩 d['Michael'] #添加学生Adam的信息 d['Adam'] = 67
判断某个key是否存在:
d={'Michael':100,'Bob':90,'Tracy':80} print('Tom' in d) #返回False print(d.get('Tomy')) #返回None print(d.get('Tomy',-1)) #返回指定的-1
需要注意的是,1、dict的key必须是不可变对象。2、dict内部存放的顺序和key放入的顺序是没有关系的。
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
所以,dict是用空间来换取时间的一种方法。
9、set
set和dict类似,也是一组key的集合,但不存储value。
set和dict的唯一区别在于没有存储对应的 value。
由于key不能重复,所以,在set中,没有重复的key,重复元素会被自动过滤。
创建set
#要创建set,需要提供一个list作为输入集合: s=set([1,2,3])
使用add()函数进行添加
s=set([1,2,3])
s.add(4)
使用remove()函数删除元素
s.remove(3)