程序是什么
人与计算机对话的语言;人通过程序下命令,由计算机完成命令。
人机交互方式
输入文字
操作图形界面
输入语言
指点触摸屏
拨动游戏杆
虚拟现实技术
程序设计语言的发展:从机械编程到高级语言
计算思维:如何用程序解决问题
使用程序思维来思考问题
主要特征:
Python语言程序是分行的,每行做一件事情,称为“语句”,从上到下顺次做;
语句与行与行之间必须左对齐;
有些语句(如if、else、while)的末尾是冒号“:”,这样,下面的若干行就都要缩进4个空格,而且这些缩进的语句也必须左对齐;
符号“#”后面的内容是程序里的备注或者注释,对语句没有影响。
#输入某年某月某日,判断这一天是这一年的第几天
import datetime;
dtstr = input('Enter the datatime :(20170228):')
dt = datetime.datetime.strptime(dtstr,"%Y%m%d")
another_dtstr = dtstr[:4] +'0101'
another_dt = datetime.datetime.strptime(another_dtstr,"%Y%m%d")
print(int((dt-another_dt).days) + 1)
运行结果
Enter the datatime :(20170228):20170228
59
进程已结束,退出代码0
注意对齐和缩进
注意字母大小写、空格
注意左右括号的配对
#输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
import string
s =input('input a string:')
letter = 0
space = 0
digit = 0
other = 0
for c in s :
if c.isalpha():
letter+=1
elif c.isspace():
space += 1
elif c.isdigit():
digit += 1
else:
other+= 1
print('There are %d letters,%d space,%d digits \ and %d other characters in your string.'\
%(letter,space,digit,other))
input a string:dontlike0101
There are 8 letters,0 space,4 digits \ and 0 other characters in your string.
进程已结束,退出代码0
代码强制缩进
python的强制缩进规范完成了关键部分
需要良好的编程规范
变量、函数、类命名
注释和文档
一些编程上的良好风格
数据对象及其组织
什么是数据
数据是信息的表现形式和载体
对现实世界实体和概念的抽象
大数据:海量、可证性等
多种多样的数据类型
描述事物大小、次序的数值类型
描述事物各方面特性的文本字符串类型
描述事物时间属性的日期时间类型等
复杂数据类型:图像、音频、视频等
简单类型用来表示值
整数int、浮点数float、复数complex、逻辑值bool、字符串str
容器类型用来组织这些值
列表list、元组tuple、集合set、字典dict
数据类型之间几乎都可以转换
对数据进行组织
对大量的数据进行处理的时候,需要建立各种各样的数据组织,以便提高计算效率
组织方式
没有组织
标签是组织数据
队列、栈、树、图等
计算和控制流
计算与流程
对现实世界处理和过程的抽象
各种类型的数据对象,可以通过各种运算组织成复杂的表达式
运算语句
将表达式赋值给变量进行引用
赋值语句用来实现处理与暂存
表达式计算
函数调用
赋值
控制流语句
对数据进行组织,用来组织语句描述过程
顺序结构
条件分支:if
循环结构:for、while
定义语句
def、class
定义语句也用来组织语句,吧一系列运算语句集合起来给一个名字
描述了一个包含一系列处理过程的计算单元,主要为了源代码的各种复用
可以定义函数、类等“代码”对象
调用函数或者类,也可以得到数据对象,python里所有可调用的事物称为callable
函数定义
类定义
数据类型/基本类型:数值
整数类型
最大特点是不限制大小
无论多么复杂的算是都可以直接得到结果
运算符 | 功能 | 备注 |
m+n | 加法 | |
m-n | 减法 | |
m*n | 乘法 | |
m//n | 整数除法 | 结果就是商的整数部分 |
m/n | 除法 | “真”除法,得到小数 |
m%n | 求余数 | |
divmod(m,n) | 求整数除法和余数 | 会得到两个整数,一个是m//n,另一个是m%n |
m**n | 求乘方 | 整数m的n次方 |
abs(m) | 求绝对值 |
大小比较
m==n | 相等比较 | m是否等于n |
m>n | 大于比较 | m是否大于n |
m>=n | 大于或者等于比较 | m是否大于或者等于n |
m<n | 小于比较 | m是否小于n |
m<=n | 小于或者等于比较 | m是否小于或者等于n |
连续比较判断
数的进制
通常用的是十进制是0-9,十个不同符号
逢十进一
十进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
二进制 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 |
八进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 |
十六进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
十进制 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
二进制 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 | 10001 |
八进制 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 | 21 |
十六进制 | 9 | a | b | c | d | e | f | 10 | 11 |
整数的各种进制表示
python语言中可以直接用二进制、八进制和十六进制来表示整数,只要加一个前缀用以标识几进制即可
进制 | 表示 | 例子 |
十进制decimal | 无前缀数字 | 367 |
二进制binary | 0b前缀 | 0b101101111 |
八进制octal | 0o前缀 | 0o557 |
十六进制hexadecimal | 0x前缀 | 0x16f |
浮点数类型
浮点类型float
操作与整数类似
浮点数受到17位有效数字的限制
特点
科学计数法
有效位数
特性
进制转换导致精度误差
复数类型
复数生成
python内置复数数据类型
复数运算
支持所有常见计算
复数比较
复数之间只能比较是否相等
复数应用
求平面上两点之间的距离
更多的数学函数
math模块
数字常数
圆周率、自然对数的底e等
数学函数
三角函数、对数、最大公约数、最小公倍数等
cmath模块
专门面向复数计算
math模块中的数学函数只能用于计算整数和浮点数,对于复数就无能为力了
平面直角坐标和极坐标之间的转换
数据类型/基本类型:逻辑值
判断与真值
逻辑(bool)类型
逻辑值仅包括真(true)/假(false)两个
用来配合if/while等语句做条件判断
“与”and
“并且”
and连接的两个真值同时为真,计算结果才为真
与and | True | False |
True | True | False |
False | False | False |
“或”or
“或者”
or连接的两个真值只要有一个为真,计算结果就为真
非not
“否定”
not连接的一个真值,非真为假,非假为真
and和or是双目运算,有两个逻辑类型真值进行运算
not是单目运算,作用与一个逻辑类型真值
优先级
not>and>or
各种类型对应的真值
整数、浮点数和复数类型
0是“假”,所有非0的数值都是“真”
字符串类型
空串(“”)是“假”,所有非空串都是“真”
所有序列类型(包括字符串)
空序列是“假”,所有非空的序列都是”真“
空值None
表示“无意义”或者“不知道”,也是“假”
文本的表示
字符串就是把一个个文字的字符“串起来”的数据
表示字符串数值
用双引号或者单引号都可以表示字符串,但必须成对
多行字符串用三个连续单引号表示
特殊字符用转义符号“\”表示
字符的编号
第一个字符的编号是0,第二个字符编号是1,...
最后一个字符的编号是-1,倒数第二个字符编号是-2...
字符串与名字的区别
字符串是数据本身
名字是数据的标签
名字和字符串是“名”和“值”之间的关系
一个字符串数值可以关联多个名字
一个名字在用一时刻只能关联一个字符串数值
字符串数值只能是字符串类型
常见的字符串操作
获取字符串的长度
len函数
切片(slice)操作
s[start:end:step]
“加法”和“乘法”
+:将两个字符串进行连接,得到新的字符串
*:将字符串重复若干次,生成新的字符串
判断字符串内容是否相同(==)
判断字符串是否包含某个字符串(in)
删除空格
str.strip:去掉字符串前后的所有空格,内部的空格不受影响
str.lstrip:去掉字符串前部(左部)的所有空格
str.rstrip:去掉字符串后部(右部)的所有空格
判断字母数字
str.isalpha:判断字符串是否全部由字母构成
str.isdigit:判断字符串是否全部由数字构成
str.isalnum:判断字符串是否仅包含字母和数字,而不含特殊字符
split:分割,join:合并
'You are my sunshine'.split(' ')
upper/lower/swapcase:大小写相关
ljust/center/rjust:排版左中右对齐
replace:替换子串
序列(sequence)
能够按照整数顺序排列的数据
序列的内部结构
可以通过从0开始的连续整数来索引单个对象
可以执行切片,获取序列的一部分
可以通过len函数来获取序列中包含多少元素
可以用加法“+”来重复多次,成为更长的序列
可以用乘法“*”来重复多次,成长为更长的序列
可以用“in”来判断某个元素是否在序列中存在
数据类型/变量与引用
给数据命名
命名语法:<名字>=<数据>
命名规则:
字母和数字组合而成,下划线“_”算字母,字母区分大小写
不带特殊字符(如空格、标点、运算符等)
名字的第一个字符必须是字母,而不能是数字
(在python中,汉字算是字母)
名字(name)
名字像是一个标签,通过赋值“贴”在某个数据数值上
变量:与数值关联的名字也称为变量
变量可以随时指向任何一个数据对象
赋值:名字与数值关联的过程,称为给变量赋值
“==”相等判断
“=”赋值
赋值语句:
通过赋值号将变量和表达式左右相连的语句
灵活多变的赋值语句
最基本的赋值语句形式
合并赋值
按顺序依次赋值
简写赋值语句
总结:
数值基本运算:+、-、*、/、//、%、**、hex()、oct()、bin()
类型转换:1,0,’abc‘,None、1.2,False,’‘,str(),bool(),int(),float()
字符串基本操作:+,-,len(),[],in,ord(),chr()
含有中文的字符串
字符串的高级操作:切片、split拆分、修改大小写、排版、替换
容器类型:列表与元组
列表与元组的数据不限制类型
reverse:把列表中的数据元素头尾反转重新排序
sort:把列表中的元素按照大小顺序重新排列
reverse/sort:得到重新排列列表,不影响原来的列表
num = [1,2,7,4,3,9,0]
num.reverse()
num
[0,9,3,4,7,2,1,]
num.sort(reverse = True)
num
[9,7,4,3,2,1,0]
合并:加法运算+:连接两个列表/元组
乘法运算*:复制n次,生成新列表/元组
列表/元组大小
len():列表/元组中的元素的个数
索引:元组属于不可变类型,索引只能获取对应位置中的数据值,不可赋值
列表/元组查找:in