
双击下载好的Python安装包
勾选左下角Add Python 3.7 to PATH 选项,然后选择Install now立刻安装Python.
默认安装

自定义安装

安装完成

点击电脑左下角开始按钮,输入cmd 进入到windows的命令行模式。
在命令行中输入Python,正确显示Python版本,即表示Python安装成功

如果在命令行中输入python出现如下错误

可能是因为在安装Python的过程中没有勾选 Add Python 3.7 to PATH 选项,此时需要手动对Python进行配置。
注意:如果在安装过程中,已经勾选了 Add Python 3.7 to PATH选项,并且在cmd 命令模式下输入python指令
不报错,就不需要再手动的配置Python.
右键此电脑 --> 选择 属性
选择高级系统设置–>环境变量–>找到并且双击Path
双击Path,在弹框里点击新建,找到Python的安装目录,把路径添加进去

这里新添加的路径 E:\python 是Python安装好以后,Python.exe 这个可执行文件所在的目录。

pip 是一个现代的,通用的Python包管理工具。提供了对 Python包的查找、下载、安装、卸载的功能,便于我们对Python的资源包进行管理。
在windows命令行里,输入 pip -V 可以查看pip的版本。

如果在命令行里,运行pip -V,出现如下提示:

可能是因为在安装python的过程中未勾选 Add Python 3.7 to PATH 选项,需要手动的配置pip的环境变量。
右键此电脑–>环境变量–>找到并且双击Path–>在弹窗里点击新建–>找到pip的安装目录,把路径添加进去。
-这里新添加的路径 E:\python\Scripts 是Python安装好以后,pip.exe 这个可执行文件所在的目录。
pip install <包名> 安装指定的包pip uninstall <包名> 删除指定的包pip list 显示已经安装的包pip freeze 显示已经安装的包,并且以指定的格式显示pip install 命令会从网站上下载指定的python包,默认是从 https://files.pythonhosted.org/ 网站上下载。这是个国外的网站,遇到网络情况不好的时候,可能会下载失败,我们可以通过命令,修改pip现在软件时的源。 格式:pip install 包名 - i 国内源地址
示例:
pip install ipython -i https://pypi.mirrors.ustc.edu.cn/simple/ 就是从中国科技大学(ustc)的服务器上下载requests(基于python的第三方web框架)
国内常用的pip下载源列表:

exit()
ctrl + z ==>enter
pip install ipython

IDE(Integrated Development Environment)又被称为集成开发环境。说白了,就是有一款图形化界面的软件,
它集成了编辑代码,编译代码,分析代码,执行代码以及调试代码等功能。在我们Python开发中,最常用的IDE是Pycharm.
Pycharm的安装:


运行Pycharm,选择Create New Project,创建一个新的Python工程。

选择’Pure Python’创建一个新的纯Python工程项目,Location表示该项目的保存路径,Interpreter 用来指定Python解释器的版本。

右击项目,选择New,再选择Python File

在弹出的对话框中输入的文件名HelloPython,点击OK,表示创建一个Python程序的文本文件,文本文件后缀名默认.py
在新建的 firstPythonDemo.py文件里,输入以下代码,并在空白处右键选择Run运行,表示输出python爬虫字符串。
print('hello world')
在我们工作编码的过程中,如果一段代码的逻辑比较复杂,不是特别容易理解,可以适当的添加注释,以辅助自己或者其他编码人员解读代码。
注意:注释是给程序员看的,为了让程序员方便阅读代码,解释器会忽略注释。使用自己熟悉的语言,适当的对代码进行注释说明是一种良好的编码习惯。
#开头右边的都是注释,解析器会忽略注释
print('hello world') #我的作用是在控制台输出hello world
思考下列代码有什么问题?
weather = "今天天气真好"
print(weather) # 注意,变量名不需要使用引号包裹
print(weather)
print(weather)
变量名 = 变量值。(这里的 = 作用是赋值。)说明:

在python中,只要定义了一个变量,而且它有数据,那么它的类型就已经确定了,不需要咱们开发者主动的去说明它的类型,系统会自动辨别。也就是说在使用的时候 “变量没有类型,数据才有类型”。
比如下面的示例里,a 的类型可以根据数据来确认,但是我们没法预测变量 b 的类型。

如果临时想要查看一个变量存储的数据类型,可以使用 type(变量的名字),来查看变量存储的数据类型。

- 标识符由字母、下划线和数字组成,且数字不能开头。
- 严格区分大小写。
- 不能使用关键字。
起一个有意义的名字,尽量做到看一眼就知道是什么意思(提高代码可 读性) 比如: 名字 就定义为 name ,- 定义学生 用 student
a = "zhangsan" # bad
name = "zhangsan" # good
b = 23 # bad
age = 23 # good
2、遵守一定的命名规范。
驼峰命名法,又分为大驼峰命名法和小驼峰命名法。

小驼峰式命名法(lower camel case): 第一个单词以小写字母开始;第二个单词的首字母大写,
例如:myName、aDog
FirstName、LastName.
关键字的概念
一些具有特殊功能的标识符,这就是所谓的关键字。 关键字,已经被python官方使用了,所以不允许开发者自己定义和关键字相同名字的标识符。
False None True and as a ssert break class
continue def del elif else except finally for
from global if import in is lambda nonlocal
not or pass raise return try while with
yield

print(int("123")) # 123 将字符串转换成为整数
print(int(123.78)) # 123 将浮点数转换成为整数
print(int(True)) # 1 布尔值True转换成为整数是 1
print(int(False)) # 0 布尔值False转换成为整数是 0
# 以下两种情况将会转换失败
- '''
123.456 和 12ab 字符串,都包含非法字符,不能被转换成为整数,会报错
print(int("123.456"))
print(int("12ab"))
'''
f1 = float("12.34")
print(f1) # 12.34
print(type(f1)) # float 将字符串的 "12.34" 转换成为浮点数 12.34
f2 = float( 23 )
print(f2) # 23.0
print(type(f2)) # float 将整数转换成为了浮点数
str1 = str( 45 )
str2 = str(34.56)
str3 = str(True)
print(type(str1),type(str2),type(str3))
下面以a=10 ,b=20为例进行计算

注意:混合运算时,优先级顺序为: ** 高于 * / % // 高于 + - ,为了避免歧义,建议使用 () 来处理运
算符优先级。 并且,不同类型的数字在进行混合运算时,整数将会转换成浮点数进行运算。

如果是两个字符串做加法运算,会直接把这两个字符串拼接成一个字符串。

如果是数字和字符串做加法运算,会直接报错。

如果是数字和字符串做乘法运算,会将这个字符串重复多次。







printf('hello world')


在Python中,获取键盘输入的数据的方法是采用 input 函数(至于什么是函数,咱们以后的章节中讲解),那么这个 input 怎么用呢?
看如下示例:
password = input("请输入密码:")
print('您刚刚输入的密码是:%s' % password)
注意:
if 要判断的条件:
条件成立时,要做的事情
age = 30
if age >= 18:
print("我已经成年了")
我已经成年了
age = 16
if age >= 18:
print("我已经成年了")
小总结:
- 想一想:在使用if的时候,它只能做到满足条件时要做的事情。那万一需要在不满足条件的时候,做某些事,该怎么办呢?
- 答:使用 if-else
if 条件:
满足条件时的操作
else:
不满足条件时的操作
age = 18
if age >= 18:
print("我可以去红浪漫了")
else:
print("未成年,不允许去")
if 条件:
满足条件时的操作
else:
不满足条件时的操作
- 如果有这样一种情况:当条件A满足时做事情 1 ;当条件A不满足、条件B满足时做事情 2 ;当条件B不满 足、条件C满足时做事情 3 ,那该怎么实现呢?
- 答: elif
elif的功能
if xxx1:
事情1
elif xxx2:
事情2
elif xxx3:
事情3
说明:
score = 77
if score>=90:
print('本次考试,等级为A')
elif score>=80:
print('本次考试,等级为B')
elif score>=70:
print('本次考试,等级为C')
elif score>=60:
print('本次考试,等级为D')
elif score<60:
print('本次考试,等级为E')
- 在Python中 for循环可以遍历任何序列的项目,如一个列表或者一个字符串等。
for循环的格式
for 临时变量 in 列表或者字符串等可迭代对象:
循环满足条件时执行的代码
for循环的使用
for s in "hello":
print(s)
h
e
l
l
o
for i in range(5):
print(i)
- 0
- 1
- 2
- 3
- 4
- range 可以生成数字供 for 循环遍历,它可以传递三个参数,分别表示 起始、结束和步长。
>>> range(2, 10, 3)
[2, 5, 8]
>>> for x in range(2, 10, 3):
... print(x)
...
2
5
8
字符串的常见操作包括:
获取长度:len len函数可以获取字符串的长度。
查找内容:find 查找指定内容在字符串中是否存在,如果存在就返回该内容在字符串中第一次出现的开始位置索引值,如果不存在,则返回-1.
判断:startswith,endswith 判断字符串是不是以谁谁谁开头/结尾
计算出现次数:count 返回 str在start和end之间 在 mystr里面出现的次数
替换内容:replace 替换字符串中指定的内容,如果指定次数count,则替换不会超过count次。
切割字符串:split 通过参数的内容切割字符串
修改大小写:upper,lower 将字符串中的大小写互换
空格处理:strip 去空格
字符串拼接:join 字符串拼接
列表的增删改查
#定义变量A,默认有3个元素
A = ['xiaoWang','xiaoZhang','xiaoHua']
print("‐‐‐‐‐添加之前,列表A的数据‐‐‐‐‐A=%s" % A)
#提示、并添加元素
temp = input('请输入要添加的学生姓名:')
A.append(temp)
print("‐‐‐‐‐添加之后,列表A的数据‐‐‐‐‐A=%s" % A)
strs = ['a','b','m','s']
strs.insert(3,'h')
print(strs) # ['a', 'b', 'm', 'h', 's']
a = ['a','b','c']
b = ['d','e','f']
a.extend(b)
print(a) # ['a', 'b', 'c', 'd', 'e', 'f'] 将 b 添加到 a 里
print(b) # ['d','e','f'] b的内容不变
定义变量A,默认有3个元素
A = ['xiaoWang','xiaoZhang','xiaoHua']
print("‐‐‐‐‐修改之前,列表A的数据‐‐‐‐‐A=%s" % A)
#修改元素
A[1] = 'xiaoLu'
print("‐‐‐‐‐修改之后,列表A的数据‐‐‐‐‐A=%s" % A)
python中查找的常用方法为:
#待查找的列表
nameList = ['xiaoWang','xiaoZhang','xiaoHua']
#获取用户要查找的名字
findName = input('请输入要查找的姓名:')
#查找是否存在
if findName in nameList:
print('在列表中找到了相同的名字')
else:
print('没有找到')
说明:
- in的方法只要会用了,那么not in也是同样的用法,只不过not in判断的是不存在
- 类比现实生活中,如果某位同学调班了,那么就应该把这个条走后的学生的姓名删除掉;在开发中经常会用到删除这种功能。
列表元素的常用删除方法有:
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
print('‐‐‐‐‐‐删除之前‐‐‐‐‐‐movieName=%s' % movieName)
del movieName[2]
print('‐‐‐‐‐‐删除之后‐‐‐‐‐‐movieName=%s' % movieName)
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
print('‐‐‐‐‐‐删除之前‐‐‐‐‐‐movieName=%s' % movieName)
movieName.pop()
print('‐‐‐‐‐‐删除之后‐‐‐‐‐‐movieName=%s' % movieName)
movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情']
print('‐‐‐‐‐‐删除之前‐‐‐‐‐‐movieName=%s' % movieName)
movieName.remove('指环王')
print('‐‐‐‐‐‐删除之后‐‐‐‐‐‐movieName=%s' % movieName)
- Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。
访问元组

修改元组

python中不允许修改元组的数据,包括不能删除其中的元素。
定义只有一个元素的元组,需要在唯一的元素后写一个逗号
>>> a = (11)
>>> a
11
>>> type(a)
int
>>> a = (11,) # 只有一个元素的元组,必须要在元素后写一个逗号
>>> a
(11,)
>>> type(a)
tuple
- 切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
- 切片的语法:[起始:结束:步长],也可以简化使用 [起始:结束]
- 注意:选取的区间从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身),步长表示选取间隔。
# 索引是通过下标取某一个元素
# 切片是通过下标去某一段元素
s = 'Hello World!'
print(s)
print(s[4]) # o 字符串里的第4个元素
print(s[3:7]) # lo W 包含下标 3,不含下标 7
print(s[1:]) # ello World! 从下标为1开始,取出 后面所有的元素(没有结束位)
print(s[:4]) # Hell 从起始位置开始,取到 下标为4的前一个元素(不包括结束位本身)
print(s[1:5:2]) # el 从下标为1开始,取到下标为5的前一个元素,步长为2(不包括结束位本身)
info = {'name':'班长','age':18}
print(info['age']) # 获取年龄
# print(info['sex']) # 获取不存在的key,会发生异常
print(info.get('sex')) # 获取不存在的key,获取到空的内容,不会出现异常
print(info.get('sex', '男')) # 获取不存在的key, 可以提供一个默认值。
info = {'name':'班长', 'id':100}
print('修改之前的字典为 %s:' % info)
info['id'] = 200 # 为已存在的键赋值就是修改
print('修改之后的字典为 %s:' % info)
结果:
修改之前的字典为 {'name': '班长', 'id': 100}
修改之后的字典为 {'name': '班长', 'id': 200}
info = {'name':'班长'}
print('添加之前的字典为:%s' % info)
info['id'] = 100 # 为不存在的键赋值就是添加元素
print('添加之后的字典为:%s' % info)
结果:
添加之前的字典为:{‘name’: ‘班长’}
添加之后的字典为:{‘name’: ‘班长’, ‘id’: 100}
删除元素
对字典进行删除操作,有一下几种:
del
clear()
demo:del删除指定的元素
info = {'name':'班长', 'id':100}
print('删除前,%s' % info)
del info['name'] # del 可以通过键删除字典里的指定元素
print('删除后,%s' % info)
删除前,{‘name’: ‘班长’, ‘id’: 100}
删除后,{‘id’: 100}
info = {'name':'monitor', 'id':100}
print('删除前,%s'%info)
del info # del 也可以直接删除变量
print('删除后,%s'%info)
删除前,{‘name’: ‘monitor’, ‘id’: 100}
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘info’ is not defined
info = {'name':'monitor', 'id':100}
print('清空前,%s'%info)
info.clear()
print('清空后,%s'%info)


print('欢迎马大哥光临红浪漫')
print('男宾 2 位')
print('欢迎马大哥光临红浪漫')
print('男宾 2 位')
print('欢迎马大哥光临红浪漫')
print('男宾 2 位')
print('欢迎马大哥光临红浪漫')
print('男宾 2 位')
def 函数名():
代码
# 定义一个函数,能够完成打印信息的功能
def f1():
print('欢迎马大哥光临红浪漫')
print('男宾2位')
9.2 调用函数
- 定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它
- 调用函数很简单的,通过 函数名() 即可完成调用
- 思考一个问题,如下:
- 现在需要定义一个函数,这个函数能够完成 2 个数的加法运算,并且把结果打印出来,该怎样设计?下面的代- 码可以吗?有什么缺陷吗?
def add2num():
a = 11
b = 22
c = a+b
print(c)
def add2num(a, b):
c = a+b
print c
add2num(11, 22) # 调用带有参数的函数时,需要在小括号中,传递数据
“返回值”介绍
现实生活中的场景:
我给女儿 10 块钱,让她给我买个冰淇淋。这个例子中, 10 块钱是我给女儿的,就相当于调用函数时传递到参数,让女儿买冰淇淋这个事情最终的目标,我需要让她把冰淇淋带回来,此时冰淇淋就是返回值
def add2num(a, b):
c = a+b
return c # return 后可以写变量名
def add2num(a, b):
return a+b # return 后可以写计算表达式
什么是局部变量
如下图所示:

局部变量,就是在函数内部定义的变量
其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的
- 如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量
# 定义全局变量
a = 100
def test1():
print(a) # 虽然没有定义变量a但是依然可以获取其数据
def test2():
print(a) # 虽然没有定义变量a但是依然可以获取其数据
# 调用函数
test1()
test2()
- 在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件
open(文件路径,访问模式)
f = open('test.txt', 'w')


# 新建一个文件,文件名为:test.txt
f = open('test.txt', 'w')
# 关闭这个文件
f.close()
- 使用write()可以完成向文件写入数据
f = open('test.txt', 'w')
f.write('hello world, i am here!\n' * 5)
f.close()
运行之后会在file_write_test.py文件所在的路径中创建一个文件test.txt,并写入内容,运行效果显示如下:

注意:
如果文件不存在,那么创建;如果存在那么就先清空,然后写入数据
读数据(read)
- 使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据
f = open('test.txt', 'r')
content = f.read(5) # 最多读取5个数据
print(content)
print("‐"*30) # 分割线,用来测试
content = f.read() # 从上次读取的位置继续读取剩下的所有的数据
print(content)
f.close() # 关闭文件,这个可是个好习惯哦
hello
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
world, i am here!
注意:
读数据(readline)
f = open('test.txt', 'r')
content = f.readline()
print("1:%s" % content)
content = f.readline()
print("2:%s" % content)
f.close()
读数据(readlines)
- readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行为列表的 一个元素。
f = open('test.txt', 'r')
content = f.readlines()
print(type(content))
for temp in content:
print(temp)
f.close()
- 通过文件操作,我们可以将字符串写入到一个本地文件。但是,如果是一个对象(例如列表、字典、元组等),就无
- 法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到文件里。
- 设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件,这就是序列化,反之,从文件的字 节序列恢复到内存中,就是反序列化。
Python中提供了JSON这个模块用来实现数据的序列化和反序列化。
JSON模块
- JSON(JavaScriptObjectNotation, JS对象简谱)是一种轻量级的数据交换标准。JSON的本质是字符串。
dump和dumps方法,将一个对象进行序列化。import json
file = open('names.txt', 'w')
names = ['zhangsan', 'lisi', 'wangwu', 'jerry', 'henry', 'merry', 'chris']
# file.write(names) 出错,不能直接将列表写入到文件里
# 可以调用 json的dumps方法,传入一个对象参数
result = json.dumps(names)
# dumps 方法得到的结果是一个字符串
print(type(result)) # <class 'str'>
# 可以将字符串写入到文件里
file.write(result)
file.close()
import json
file = open('names.txt', 'w')
names = ['zhangsan', 'lisi', 'wangwu', 'jerry', 'henry', 'merry', 'chris']
# dump方法可以接收一个文件参数,在将对象转换成为字符串的同时写入到文件里
json.dump(names, file)
file.close()
使用JSON实现反序列化
import json
# 调用loads方法,传入一个字符串,可以将这个字符串加载成为Python对象
result = json.loads('["zhangsan", "lisi", "wangwu", "jerry", "henry", "merry", "chris"]')
print(type(result)) # <class 'list'>
import json
# 以可读方式打开一个文件
file = open('names.txt', 'r')
# 调用load方法,将文件里的内容加载成为一个Python对象
result = json.load(file)
print(result)
file.close()
- 程序在运行过程中,由于我们的编码不规范,或者其他原因一些客观原因,导致我们的程序无法继续运行,此时,程序就会出现异常。如果我们不对异常进行处理,程序可能会由于异常直接中断掉。为了保证程序的健壮性,我们
在程序设计里提出了异常处理这个概念。

try:
可能会出现异常的代码块
except 异常的类型:
出现异常以后的处理语句
try:
f = open('test.txt', 'r')
print(f.read())
except FileNotFoundError:
print('文件没有找到,请检查文件名称是否正确')