计算机是什么
在现实生活中,越来越无法离开计算机了
电脑、笔记本、手机、游戏机、汽车导航、智能电视 。。。
计算机就是一个用来计算的机器!
目前来讲,计算机只能根据人类的指令来完成各种操作,人让它干嘛他就得干嘛
所以我们学习计算机,就是学习如何控制计算机!
计算机的组成
计算机的基本组成:控制器,运算器,存储器,输入设备,输出设备
计算机由两部分组成:硬件 和 软件
硬件包含:键盘、鼠标、显示器、CPU、主板、内存、硬盘 。。。
硬件是看的见摸得着的
软件包含:系统软件(windows、macOS、Linux)和应用软件(office 、QQ、绝地求生)
软件是看的见摸不着的,软件负责控制计算机中的硬件
计算机的使用方式
我们必须要通过软件来对计算机完成各种操作,
但是注意,软件中并不是所有的功能都会对用户开放,
用户需要调用软件提供的接口(Interface 交互界面)来操作计算机
用户界面分成两种:TUI(文本交互界面)和 GUI(图形化交互界面)
windows的命令行
命令行就是文本交互界面,通过命令行可以使用一个一个的指令来操作计算机
任何的计算机的操作系统中都包含有命令行(windows、linux、macOS)
命令行有多个不同的名字:
命令行、命令行窗口、DOS窗口、命令提示符、CMD窗口、Shell、终端、Terminal
1.如何进入到命令行
win键 + R 出现运行窗口,输入cmd,然后回车
2.命令行的结构
- 版本及版权声明(一般没有什么用)
Microsoft Windows [版本 10.0.16299.431]
(c) 2017 Microsoft Corporation。保留所有权利。
- 命令提示符
C:\Users\lilichao>
C:
- 当前所在的磁盘根目录
- 可以通过 x: 来切换盘符(x表示你的盘符)
\Users\lilichao
- 所在磁盘的路径,当前所在的文件夹
- cd 来切换目录
>
- 命令提示符,在大于号后边可以直接输入指令
3.常用的dos命令
dir 查看当前目录下的所有文件(夹)
cd 进入到指定的目录
. 表示当前目录
.. 表示上一级目录
md 创建一个目录
rd 删除一个目录
del 删除一个文件
cls 清除屏幕
命令的语法
命令 [参数] [选项]
4.小技巧
- 方向键上下,查看命令的历史记录
- tab键自动补全命令
环境变量(environment variable)
环境变量指的就是操作系统当中的一些变量。
可以通过修改环境变量,来对计算机进行配置(主要是来配置一些路径的)
1.查看环境变量
> 右键 计算机(此电脑),选择属性
> 系统界面左侧选择 高级系统设置
> 选择环境变量
环境变量界面分成了两个部分,上边是用户环境变量,下边是系统环境变量
建议只修改用户的环境变量,不要修改系统的环境变量
2.添加环境变量
> 通过新建按钮添加环境变量
> 一个环境变量可以由多个值,值与值之间使用;(英文)隔开
3.修改环境变量
> 通过编辑按钮来修改环境变量
4.删除环境变量
> 通过删除按钮来删除环境变量
path环境变量
path环境变量中保存的是一个一个的路径。
当我们在命令行中输入一个命令(或访问一个文件时),
系统会首先在当前目录下寻找,如果找到了则直接执行或打开
如果没有找到,则会依次去path环境变量的路径中去寻找,直到找到为止
如果path环境变量中的路径都没有找到,则报错
'xxx' 不是内部或外部命令,也不是可运行的程序或批处理文件。
我们可以将一些经常需要访问到的文件会程序的路径,添加到path环境变量中,
这样我们就可以在任意的位置访问到这些文件了
注意事项:
1.如果环境变量中没有path,可以手动添加
2.path环境变量不区分大小写 PATH Path path
3.修改完环境变量必须重新启动命令行窗口
4.多个路径之间使用;隔开
进制
- 十进制(最常用的进制)
- 十进制就是满十进一的进制
- 十进制当中一共有10个数字
0 1 2 3 4 5 6 7 8 9
- 十进制如何计数
0 1 2 3 4 5 6 7 8 9 10 11 12 。。。 19 20 。。。29 30
- 二进制(计算机底层使用的进制)
- 满二进一
- 二进制中一共有2个数字
0 1
- 二进制如何计数
0 1 10 11 100 101 110 111 1000
- 所有的数据在计算机底层都是以二进制的形式保存的,计算机只认二进制
- 可以将内存想象为一个一个的小格子,小格子中可以存储一个0或一个1
- 内存中的每一个小格子,我们称为1bit(位)
bit是计算机中的最小的单位
byte是我们最小的可操作的单位
8bit = 1byte(字节)
1024byte = 1kb(千字节)
1024kb = 1mb(兆字节)
1024mb = 1gb(吉字节)
1024gb = 1tb(太字节)
。。。
- 八进制(一般不用)
- 满八进一
- 八进制中一共有8个数字
0 1 2 3 4 5 6 7
- 八进制如何计数
0 1 2 3 4 5 6 7 10 11 。。。 17 20 。。。27 30
- 十六进制
- 满十六进一
- 十六进制中一共有16个数字
由于十六进制是满16才进位,
所以十六进制中引入了a b c d e f来表示 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 a b c d e f
- 十六进制如何计数
0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 。。。 1a 1b 1c 1d 1e 1f
20 21 22 。。。 2a 2b 2c 2d 2e 2f 30
- 我们在查看二进制数据时,一般会以十六进制的形式显示
文本文件和字符集
- 文本分成两种,一种叫做纯文本,还有一种叫做富文本
- 纯文本中只能保存单一的文本内容,无法保存内容无关的东西(字体、颜色、图片。。。)
- 富文本中可以保存文本以外的内容(word文档)
- 在开发时,编写程序使用的全都是纯文本!
- 纯文本在计算机底层也会转换为二进制保存,
将字符转换为二进制码的过程,我们称为编码
将二进制码转换为字符的过程,我们称为解码
编码和解码时所采用的规则,我们称为字符集
- 常见的字符集:
ASCII
- 美国人编码,使用7位来对美国常用的字符进行编码
- 包含128个字符
ISO-8859-1
- 欧洲的编码,使用8位
- 包含256个字符
GB2312
GBK
国标码,中国的编码
Unicode
万国码,包含世界上所有的语言和符号,编写程序时一般都会使用Unicode编码
Unicode编码有多种实现,UTF-8 UTF-16 UTF-32
最常用的就是UTF-8
- 乱码
编写程序时,如果发现程序代码出现乱码的情况,就要马上去检查字符集是否正确
Sublime Text 3
- 纯文本编辑器
- Package Control(Sublime的包管理器)
- Sublime Text3中的插件,通过该插件可以向Sublime中安装新的包
什么是计算机语言
计算机就是一台用来计算机的机器,人让计算机干什么计算机就得干什么!
需要通过计算机的语言来控制计算机(编程语言)!
计算机语言其实和人类的语言没有本质的区别,不同点就是交流的主体不同!
计算机语言发展经历了三个阶段:
机器语言
- 机器语言通过二进制编码来编写程序
- 执行效率好,编写起来太麻烦
符号语言(汇编)
- 使用符号来代替机器码
- 编写程序时,不需要使用二进制,而是直接编写符号
- 编写完成后,需要将符号转换为机器码,然后再由计算机执行
符号转换为机器码的过程称为汇编
- 将机器码转换为符号的过程,称为反汇编
- 汇编语言一般只适用于某些硬件,兼容性比较差
高级语言
- 高级语言的语法基本和现在英语语法类似,并且和硬件的关系没有那么紧密了
- 也就是说我们通过高级语言开发程序可以在不同的硬件系统中执行
- 并且高级语言学习起来也更加的容易,现在我们知道的语言基本都是高级语言
- C、C++、C#、Java、JavaScript、Python 。。。
编译型语言和解释型语言
计算机只能识别二进制编码(机器码),所以任何的语言在交由计算机执行时必须要先转换为机器码,
也就是像 print('hello') 必需要转换为类似 1010101 这样的机器码
根据转换时机的不同,语言分成了两大类:
编译型语言
- C语言
- 编译型语言,会在代码执行前将代码编译为机器码,然后将机器码交由计算机执行
- a(源码) --编译--> b(编译后的机器码)
- 特点:
执行速度特别快
跨平台性比较差
解释型语言
- Python JS Java
- 解释型语言,不会在执行前对代码进行编译,而是在执行的同时一边执行一边编译
- a(源码)--解释器--> 解释执行
- 特点:
执行速度比较慢
跨平台性比较好
Python的介绍
Python是解释型语言
Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),是一种广泛使用的高级编程语言,属于通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年。可以视之为一种改良(加入一些其他编程语言的优点,如面向对象)的LISP。作为一种解释型语言,Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。相比于C++或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。
Life is short you need Python (人生苦短,我用Python)
Python的用途:
WEB应用
Facebook 豆瓣 。。。
爬虫程序
科学计算
自动化运维
大数据(数据清洗)
云计算
桌面软件/游戏
人工智能
。。。
Python开发环境搭建
开发环境搭建就是安装Python的解释器
Python的解释器分类:
CPython(官方)
用c语言编写的Python解释器
PyPy
用Python语言编写的Python解释器
IronPython
用.net编写的Python解释器
Jython
用Java编写的Python解释器
步骤:
1.下载安装包 python-3.6.5.exe
- 3.x
- 2.x
2.安装(傻瓜式安装)
3.打开命令行窗口,输入python 出现如下内容
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Python的交互界面
当我们通过命令行来输入Python,所进入到的界面就是Python的交互界面
结构:
版本和版权声明:
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
命令提示符:
>>>
在命令提示符后可以直接输入Python的指令!输入完的指令将会被Python的解释器立即执行!
安装Python的同时,会自动安装一个Python的开发工具IDLE,通过IDLE也可以进入到交互模式
但是不同的是,在IDLE中可以通过TAB键来查看语句的提示。
IDLE实际上就是一个交互界面,但是他可以有一些简单的提示,并且可以将代码保存
交互模式只能你输入一行代码,它就是执行一行,所以他并不适用于我们日常的开发!
仅可以用来做一些日常的简单的测试!
我们一般会将Python代码编写到一个py文件中,然后通过python指令来执行文件中的代码
Python和Sublime的整合
1.在Sublime中执行Python代码,ctrl + b 自动在Sublime内置的控制台中执行
这种执行方式,在某些版本的Sublime中对中文支持不好,并且不能使用input()函数
2.使用SublimeREPL来运行python代码
安装完成,设置快捷键,希望按f5则自动执行当前的Python代码
{ "keys": ["f5"], "caption": "SublimeREPL:Python","command": "run_existing_window_command", "args":{"id": "repl_python_run","file": "config/Python/Main.sublime-menu"}},
几个概念
1.表达式
表达式就是一个类似于数学公式的东西
比如:10 + 5 8 - 4
表达式一般仅仅用了计算一些结果,不会对程序产生实质性的影响
如果在交互模式中输入一个表达式,解释器会自动将表达式的结果输出
2.语句
在程序中语句一般需要完成某种功能,比如打印信息、获取信息、为变量赋值。。。
比如:
print()
input()
a = 10
语句的执行一般会对程序产生一定的影响
在交互模式中不一定会输出语句的执行结果
3.程序(program)
程序就是由一条一条的语句和一条一条的表达式构成的。
4.函数(function)
函数就是一种语句,函数专门用来完成特定的功能
函数长的形如:xxx()
函数的分类:
内置函数
- 由Python解释器提供的函数,可以在Python中直接使用
自定义函数
- 由程序员自主的创建的函数
当我们需要完成某个功能时,就可以去调用内置函数,或者自定义函数
函数的两个要素:
参数
- ()中的内容就是函数的参数
- 函数中可以没有参数,也可以有多个参数,多个参数之间使用,隔开
返回值
- 返回值是函数的返回结果,不是所有的函数都有返回值
基本语法
1.在Python中严格区分大小写
2.Python中的每一行就是一条语句,每条语句以换行结束
3.Python中每一行语句不要过长(规范中建议每行不要超过80个字符)
"rulers":[80],
4.一条语句可以分多行编写,多行编写时语句后边以\结尾
5.Python是缩进严格的语言,所以在Python中不要随便写缩进
6.在Python中使用#来表示注释,#后的内容都属于注释,注释的内容将会被解释器所忽略
我们可以通过注释来对程序进行解释说明,一定要养成良好的编写注释的习惯
注释要求简单明了,一般习惯上#后边会跟着一个空格
字面量和变量
字面量就是一个一个的值,比如:1,2,3,4,5,6,‘HELLO’
字面量所表示的意思就是它的字面的值,在程序中可以直接使用字面量
变量(variable)变量可以用来保存字面量,并且变量中保存的字面量是不定的
变量本身没有任何意思,它会根据不同的字面量表示不同的意思
一般我们在开发时,很少直接使用字面量,都是将字面量保存到变量中,通过变量来引用字面量
变量和标识符
数据类型
数据类型指的就是变量的值得类型,也就是可以为变量赋哪些值
数值
整型
布尔值
浮点型
复数
字符串
空值
类型检查
对象(object)
- Python是一门面向对象的语言
- 一切皆对象!
- 程序运行当中,所有的数据都是存储到内存当中然后再运行的!
- 对象就是内存中专门用来存储指定数据的一块区域
- 对象实际上就是一个容器,专门用来存储数据
- 像我们之前学习的数值、字符串、布尔值、None都是对象
- 参考 图1
对象的结构
- 每个对象中都要保存三种数据
- id(标识)
> id用来标识对象的唯一性,每一个对象都有唯一的id
> 对象的id就相当于人的身份证号一样
> 可以通过id()函数来查看对象的id
> id是由解析器生成的,在CPython中,id就是对象的内存地址
> 对象一旦创建,则它的id永远不能再改变
- type(类型)
> 类型用来标识当前对象所属的类型
> 比如:int str float bool 。。。
> 类型决定了对象有哪些功能
> 通过type()函数来查看对象的类型
> Python是一门强类型的语言,对象一旦创建类型便不能修改
- value(值)
> 值就是对象中存储的具体的数据
> 对于有些对象值是可以改变的
> 对象分成两大类,可变对象 不可变对象
可变对象的值可以改变
不可变对象的值不能改变,之前学习的对象都是不可变对象
变量和对象
- 对象并没有直接存储到变量中,在Python中变量更像是给对象起了一个别名
- 变量中存储的不是对象的值,而是对象的id(内存地址),
当我们使用变量时,实际上就是在通过对象id在查找对象
- 变量中保存的对象,只有在为变量重新赋值时才会改变
- 变量和变量之间是相互独立的,修改一个变量不会影响另一个变量
类型转换
- 所谓的类型转换,将一个类型的对象转换为其他对象
- 类型转换不是改变对象本身的类型,而是根据当前对象的值创建一个新对象
运算符(操作符)
- 运算符可以对一个值或多个值进行运算或各种操作
- 比如 + 、-、= 都属于运算符
- 运算符的分类:
1.算术运算符
2.赋值运算符
3.比较运算符(关系运算符)
4.逻辑运算符
5.条件运算符(三元运算符)
小实践理解基本知识:
一、Python编程基础
- 输入两个整数,并打印出它们的和
a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')
# 分别把 a、b 转换成整数
int(a)
int(b)
# 计算 a、b 的和,赋值给变量c
c= int(a)+int(b)
# 打印c
print(c)
2.输入两个整数,如果两个整数之和小于100,则输出 ‘小于100’,否则输出 ‘不小于100’
a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')
# 分别把 a、b 转换成整数
int(a)
int(b)
# 计算 a、b 的和,赋值给变量c
c= int(a)+int(b)
# 判断c是否小于100,按要求输出
if c < 100:
print('\n小于100\n')
else:
print('\n不小于100\n')
3.依次输入10组整数,然后求和,并输出
sum_num = 0
for i in range(10):
# 用input输入数字并转化为整数
i = input('请输入一个整数: ')
int(i)
# sum_num 对输入的数字进行累加
sum_num=sum_num+int(i)
print(sum_num)
4.选取列表的第2到第5项,并打印(从0开始计数,即取出c d e f)
words = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
# 选取第2-5项,并打印
a=words[2:6]
print(a)
5.使用列表生成式的方法,根据 list1 生成 list2
list1 = [1, 2, 3, 4, 5, 6, 7, 8]
list2 = [100, 200, 300, 400, 500, 600, 700, 800]
list1 = [1, 2, 3, 4, 5, 6, 7, 8]
# 列表推导式生成list2
list2 = [n*100 for n in list1]
print(list2)
6.把下列字符串按下划线(’_’)划分成若干个片段
string1 = ‘this_is_a_sample’
[‘this’, ‘is’, ‘a’, ‘sample’]
string1 = 'this_is_a_sample'
# 按'_'划分string1
string1.split('_')
7.统计英语6级试题中所有单词的词频,并返回一个如下样式的字典
{‘and’:100,‘abandon’:5}
英语6级试题的文件路径./artical.txt
处理要求
(a) ‘\n’是换行符 需要删除
(b) 标点符号需要处理:[’.’, ‘,’, ‘!’, ‘?’, ‘;’, ‘’’, ‘"’, ‘/’, ‘-’, ‘(’, ‘)’]
© 阿拉伯数字需要处理:[‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘0’]
(d) 注意大小写 一些单词由于在句首,首字母大写了。需要把所有的单词转成小写’String’.lower()
(e) 高分项
通过自己查找资料学习正则表达式,并在代码中使用(re模块)
可参考资料:https://docs.python.org/3.7/library/re.html
import re
import sys
filename = sys.argv[1]
def get_artical(artical_path):
with open(artical_path) as fr:
data = fr.read()
return data
# get_artical()为自定义函数,可用于读取指定位置的试题内容。
four = get_artical('./artical.txt')
four = open("./artical.txt","r+")
oklist = []
for i in four.readlines():
oklist.append(i.strip('\n'))
okset = set(oklist)
f = open("./artical.txt")
freqdic = {}
def countfreq(list):
for i in list:
if i in freqdic:
freqdic[i] += 1
else:
freqdic[i] = 1
for line in f.readlines():
st = line.lower()
singlelinelist = re.split("\W+",st)
b = []
for i in singlelinelist:
b.append(i.strip("_"))
countfreq(b)
dellist = []
for i in freqdic:
if len(i) > 1 and i[-1] == "s":
if i[:-1] in freqdic:
freqdic[i[:-1]] += freqdic[i]
dellist.append(i)
for i in dellist:
del freqdic[i]
bookset = set(freqdic)
t = []
common = bookset & okset
known = list(common)
for i in known:
del freqdic[i]
#return a freq turple.
for key,value in freqdic.items():
if key.isalpha():
t.append((key,value))
#write turple into a txt file.
print(t)
f.close()
二、Python面向对象
(1)其中work/james_new.txt文件的内容为:
james,2004-5-21,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22
(2)其中work/loren.txt文件的内容为:
loren,2011-11-3,270,3.59,4.11,3:11,3:23,4-10,3-23,4:10,4.21,4-21
(3)其中work/mark.txt文件的内容为:
mark,2010-2-4,300,3.59,3.11,3:11,3:23,4-10,4-23,4:10,4.21,4-21
1.定义get_cocah_data函数读取work/james_new文件的内容,定义运动员类包括name、dob、times属性,top3、sanitize方法, top3函数作用取时间中最短的3个时间,不能重复 sanitize函数作用统一james_new中的不一致的时间数据 将读取的数据存储到运动员的对象中并打印。
def get_coach_data(filename):
with open(filename) as f:
line = f.readline()
return line.strip().split(',')
class Athlete:
def __init__(self,a_name,a_dob=None,a_times=[]):
self.name = a_name
self.dob = a_dob
self.times = a_times
def top3(self):
return sorted(set([self.sanitize(t) for t in self.times]))[0:3]
def sanitize(self,time_string):
if '-' in time_string:
splitter = '-'
elif ':' in time_string:
splitter = ':'
else:
return (time_string)
(mins,secs) = time_string.split(splitter)
return (mins+'.'+secs)
james_new = get_coach_data('work/james_new.txt')
james_name = james_new.pop(0)
james_dob = james_new.pop(0)
james_times = james_new
james = Athlete(james_name,james_dob,james_times)
print('姓名:%s,生日:%s,最快的3次成绩:%s' %(james.name,james.dob,james.top3()))
2.Rugby、OtherAthlete继承Athlete,Rugby和OtherAthlete都增加了自己特有的属性squat。在Rugby中重写top3方法,去最长的3个时间(允许重复)。在OtherAthlete中重写top3方法,取最短的3个时间(允许重复)。分别调用get_coach_data方法读取loren.txt和mark.txt文件,将文件的存储到Rugby、OtherAthlete子类对象中。定义print_rugby函数,参数为父类的对象,在函数中打印name、dob、squat和top3的返回结果。调用print_rugby函数以多态的方式分别打印Rugby、OtherAthlete的信息。
def get_coach_data(filename):
with open(filename) as f:
line = f.readline()
return line.strip().split(',')
class Rugby(Athlete):
def __init__(self,a_name,a_bod,a_squat,a_times):
Athlete.__init__(self,a_name,a_bod,a_times)
self.squat = a_squat
def top3(self):
return sorted([self.sanitize(t) for t in self.times])[-3:]
class OtherAthlete(Athlete):
def __init__(self,a_name,a_bod,a_squat,a_times):
Athlete.__init__(self,a_name,a_bod,a_times)
self.squat = a_squat
def top3(self):
return sorted([self.sanitize(t) for t in self.times])[0:3]
loren = get_coach_data('work/loren.txt')
mark = get_coach_data('work/mark.txt')
loren = Rugby(loren.pop(0),loren.pop(0),loren.pop(0),loren)
mark = OtherAthlete(mark.pop(0),mark.pop(0),mark.pop(0),mark)
def print_rugby(athlete):
print(athlete.name)
print(athlete.dob)
print(athlete.squat)
print(athlete.top3())
print_rugby(loren)
print_rugby(mark)