Python入门Part1——Python3基础语法1

写在前面

博主从大二下学期开始断断续续学习Python,至今刚好一年半的时间,学习方式主要是通过实体课堂(占比10%)、网课(30%)、博客等各类网上资源(50%)、同学交流切磋(10%)。练习方式主要依托于专业课程的各类作业,学校的科创项目,以及将现实中碰到的问题设法通过编程方式解决。如果你已涉及过任意一门编程语言,入门Python非常简单,需要的就是不断的使用与练习,遇到问题及时查阅。

推荐IDE(集成开发环境)

由于Python2.X版本即将停止更新,建议直接学习Python3.X版本

  • 初始涉猎:
    • Python自带IDLE
      • 下载安装Python并配置环境变量后(安装时勾选Add python.exe to Path),搜索IDLE并打开,新建XXX.py即可开始编写程序。但功能较弱,使用体验相对较差,可做入门使用。
  • 渐入佳境
    • Jupyter Notebook可直接使用Anaconda
      • 适用于探索性的数据处理、分析,交互式运行模式,每个cell是一个运行单位,可以将程序拆为一个个部分运行,避免反复运行程序。强大的魔法命令与支持markdown语法,可以使之大有用处。文件保存为.ipynb的文件,也可以转化为.py;.pdf等多种格式。
      • 联网状态Shift+Tab键可以自动查看当前代码帮助
      • Tab键可以直接进行代码补全
      • 打括号类、引号类双边的内容,操作一边后即生成两边,且光标自动跳到中间
    • Spyder可直接使用Anaconda
      • 界面类似于MATLAB,适应脚本编辑式代码编写,同时也可以交互式运行
      • 同样具备Jupyter的查询与补全优势
    • Visual Studio Code
      • 多种编程语言均可使用的平台,适用于多个脚本文件之间的切换与编辑

推荐学习顺序

Python作为开源的语言,除了使用其基本语法之外,还需要熟悉一些主流模块的使用。作为一名交通专业的学生,就应用而言,推荐的学习顺序如下:

基础:

  1. Python基础语法
  2. 矩阵运算模块、数据处理模块——NumpyPandas
  3. 绘图展示模块matplotlib
  4. 时间处理模块timedatetime

提升:

  • 如果你对机器学习感兴趣可以尝试:

  • 如果你需要使用统计分析功能:

  • 如果你需要进行地理信息分析、处理:

其余模块及使用可以自行Google可以使用Google访问助手查看文档,总之,以解决实际问题为目的……

推荐学习方式

可以首先刷一下莫凡老师的网课,对各应用有一定认识。Python基础、Numpy、pandas、matplotlib、机器学习等内容都有所涉及,讲解内容通俗易掌握!

各类Cheatsheet可以自行Google,打印后参阅,或者在学习的过程中自己整理。

  • 根据问题进行搜素

国内CSDN、博客园等,国外Stack Overflow等,会有不少人与你有相同的疑问。你会逐渐明白报错的含义!

  • 在实战中成长

事实证明下载一堆学习资料不如切实去解决碰到的问题,入门之后就尽快去实战,边做边学吧!

Part1 Python3基础语法入门

1.模块安装与导入

1.1模块安装

  1. Python自带的安装方式是pip安装,Anaconda自带的安装方式是conda安装。
  2. 以Windows安装geopandas为例,打开‘cmd’即命令提示符,网络连接状态下输入conda install geopandaspip install geopandas进行安装。conda安装时使用conda install -c https://conda.anaconda.org/conda-forge geopandas可以指定来源。
  3. Anaconda环境安装时已自带了常用模块,很多模块无需安装。conda安装较慢时可以自行搜索“anaconda清华镜像”进行配置,提高下载安装速度。
  4. 还有其他的pip与conda指令用于安装、更新、卸载等,可自行查阅。

1.2模块导入

Type1:import 模块名[as别名]

Type2:from 模块名 import 对象名[as 别名]或from 模块名 import *

1
2
3
4
5
6
7
8
#Type1:
#将numpy以np的指代名称导入,此文件中使用时则只需输入‘np.函数名’
import numpy as np
import random#也可以不用as命名
#Type2:
#导入库的某特定函数,*代表导入全部函数,此文件中使用只需输入‘函数名’,无需模块名前缀
from math import sin
from math import *

2. 最最基本用法

2.1 Python规范与建议

  1. Python与其他语言不同,严格使用“缩进”Tab控制程序,在编写时应当注意缩进
  2. #用于单行注释,''''''组合内写入多行注释
  3. 代码较长时可以采用续行符“\”换行继续写
  4. 善于运用()注明优先运算与相连接的关系,逻辑运算符&,|两边的条件一定需要用()分别括起来
  5. 最好在每个类、函数定义一段完整的功能代码后,添加一个空行,在运算符两侧各增加一个空格,逗号后面增加一个空格,没有原因,习惯问题,不遵守也不会报错,部分符号与Python使用的符号冲突时,需要采用“+符号”的形式转义
  6. Python编写时无需提前申明对象类型,使用后自动生成
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#1.缩进,以函数定义为例
def test():
pass
#2.注释
#此处即为单行注释
'''
此处
可写
多行
注释
'''
#3.续行符\
print('This sentence is so long that I want to change to next \
row.')
#4.使用括号、
print((1 + 3) * ( 2 + 4 ))
#5.增加空格
print(1 + 3)
print('Let\'s go, Erica')
This sentence is so long that I want to change to next row.
24
4
Let's go, Erica

2.2 数据类型

type(x)可以查看类型

  • 数值型:整数、浮点数、复数
  • 字符串
  • 数据存储工具:list链表,dictionary字典,tuple元组
  • 布尔型
  • 空值
  • ……
1
2
3
4
5
6
7
8
print(type(0))
print(type(1.22))
print(type(3+4j))
print(type('a'))
print(type([1,2,3]))
print(type({1:'Mike',2:'Terry'}))
print(type(True))
print(type(None))
<class 'int'>
<class 'float'>
<class 'complex'>
<class 'str'>
<class 'list'>
<class 'dict'>
<class 'bool'>
<class 'NoneType'>

2.3 数学运算

  • ‘ + ‘ 加
  • ‘ - ‘ 剪
  • ‘ * ‘ 乘
  • ‘ / ‘ 除
  • ‘ // ‘ 整除
  • ‘ % ‘ 取余
  • ‘ ** ‘ 平方
  • abs(x) 绝对值
  • pow(x,y) x的y次方
  • round(x) 四舍五入
1
2
3
4
5
6
7
8
9
10
print(1 + 1)
print(5 - 1)
print(5 * 5)
print(6 / 3)
print(20 // 3)
print(20 % 3)
print(3**2)
print(abs(-3))
print(pow(3,3))
print(round(4.6))
2
4
25
2.0
6
2
9
3
27.0
5

3. 数据存储工具

Python的数据存储主要有list,dictionary,tuple,str几种形式。这些都是Python的内置对象,也可以理解为存储数据的工具。

Python中不需要事先声明变量与类型,直接赋值就可以创建任意类型的对象,变量的值和类型都可以不断更改。Python的变量名称与C++中的要求类似,可以由字母或下划线开头,由字母、数字、下划线组成,且大小写不同,变量不同。

以下几种数据存储工具中:

  1. 元组定义后不可变,列表、字典、集合定义后可变
  2. 列表与元组是有序的,字典与集合是无序的
  3. 列表与元组的元素可以重复,字典中的索引不能重复,值可以重复;集合中的值不能重复

3.1list链表[]

  1. 链表list,使用中括号[]表示,list可以嵌套list,且list中的数据形式没有要求,可以是数字、字母、符号等内容。
  2. 索引从0开始向后排,如希望获取链表test的第一个值,则输入test[0]
  3. 可以采用切片的形式获取数据,切片时输入首尾数字,且为左闭右开,形式为listname[start:stop:step],不需要的部分可以省略。切片可以:获取部分元素、增加元素、修改元素、删除元素等
1
2
3
4
5
6
7
8
test = [12, 15, 18, 'a', 'b', 'd']#创建list
print(test[0])#输出第一个值
print(test[0:3])#输出第1,2,3个值,体会左闭右开
print(test[1:])#输出第二个之后的全部值
print(test[:4])#输出第五个之前的全部值
print(test[::2])#从头到尾以步长为2获取
print(test[-1])#倒叙获取,-1为倒数第一个元素,其余依次类推
print(test[-1:-4:-1])#体会三个元素的含义
12
[12, 15, 18]
[15, 18, 'a', 'b', 'd']
[12, 15, 18, 'a']
[12, 18, 'b']
d
['d', 'b', 'a']

list常用方法:

  • 添加类
    • XX.append(x)——尾部追加一个元素
    • XX.extend(L)——尾部追加一个或多个元素
    • XX.insert(index,x)——指定位置插入元素
  • 删除类
    • XX.pop()——删除并返回指定位置的元素
    • XX.remove(x)——删除列表中第一个与指定值相等的元素
    • XX.clear()——清空元素
  • 索引计数类
    • XX.count(x)——计算某一个值x出现的次数
    • XX.index(x)——计算元素x第一次出现的索引
  • 排序类
    • XX.sort()——排序
    • XX.reverse()——元素翻转
  • 内置函数类
    • len(listname)——返回list长度
    • max(listname)——最大值
    • min(listname)——最小值
    • sum(listname)——求和值
1
2
3
test2 = [1, 3, 4, 7 ,10]
test2.append(11)
print(test2)
[1, 3, 4, 7, 10, 11]
1
2
test2.extend([22,33,44])
print(test2)
[1, 3, 4, 7, 10, 11, 22, 33, 44]
1
2
test2.insert(0,100)
print(test2)
[100, 1, 3, 4, 7, 10, 11, 22, 33, 44]
1
2
test2.pop()
print(test2)
[100, 1, 3, 4, 7, 10, 11, 22, 33]
1
2
test2.remove(100)
print(test2)
[1, 3, 4, 7, 10, 11, 22, 33]
1
2
print(test2.count(10))
print(test2.index(1))
1
0
1
test2.sort()
1
test2.reverse()
1
test2
[33, 22, 11, 10, 7, 4, 3, 1]
1
2
3
4
print(len(test2))
print(max(test2))
print(min(test2))
print(sum(test2))
8
33
1
91

3.2dictionary字典{}

  1. 可以同时包含“键”keys与“值”values的存储方式
  2. 运算速度较list快
  3. 直接输入键名或get或setdefault的方式获取值
  4. 对字典对象直接进行遍历或迭代时默认遍历键,若想遍历值,则使用XX.items()获取
  5. 增删改操作此处不再详细叙述
1
2
dict1={'apple':6.0, 'banana':3.0, 'lemon':10.0}
dict1['apple']
6.0
1
dict1.get('apple')
6.0
1
dict1.setdefault('apple')
6.0
1
dict1.setdefault('peach',22.0)#检查是否有,没有的话插入
22.0
1
dict1
{'apple': 6.0, 'banana': 3.0, 'lemon': 10.0, 'peach': 22.0}

3.3tuple元组()

  1. 创建后即不可更改
  2. 有序
  3. 比list运算速度快且轻量,若元组仅有一个元素则需要在末尾添加一个逗号

3.4set集合{}

  1. 元素非重复
  2. 元素无序
  3. 可以实现去除重复值的作用

3.5str字符串’ ‘

  1. 字符串可以使用+进行连接
1
set([1,1,2,2,2,3])
{1, 2, 3}
1
'Wang' + 'Qianni'
'WangQianni'

4.逻辑符号与逻辑结构

4.1关系符号与逻辑符号

大于, <小于, ==等于, =赋值, >=大于等于, <=小于等于
& and 交集
| or 并集
in 包含

1
3 > 5
False
1
2
3
a = 10
if (a<17)&(a>9):
print('YES!')
YES!

4.2逻辑结构

4.2.1if判断

if 后内容为真,则执行;否则不执行

4.2.2if…else…判断

if 后内容为真,则执行if内容;否则执行else内容

4.2.3if…elif…else…判断

从第一个if顺序判断,直至符合条件并执行,否则执行else内容

1
2
if 1 == True:#注意冒号
print('YES!')
YES!
1
2
3
4
5
name = 'Wang_Qianni'
if name == 'Wang_Qianni':#注意冒号
print('YES!')#注意缩进
else:#注意冒号
print('No!')#注意缩进
YES!
1
2
3
4
5
6
7
8
9
10
x = 4
y = 2
z = 3
if x > 1:
print ('x > 1')
elif x < 1:
print('x < 1')
else:
print('x = 1')
print('finish')
x > 1
finish

4.2.4while循环

当while后为真时,持续循环,否则跳出循环

1
2
3
4
c = 0
while c<5:#不要忘记冒号
print(c)
c+=1
0
1
2
3
4

4.2.5for循环

基本形式:

for item in sequence:

expressions

可以使用range(n)函数遍历0至(n-1)的n个值:

for item in range(n):

expressions
1
2
3
list1=[1,2,3,6,7]
for i in list1:
print(i)
1
2
3
6
7
1
2
for i in range(5):
print(i)
0
1
2
3
4

5.def函数的定义与使用

一般形式定义:

  1. def顶格写,后面有冒号
  2. 命令部分需要缩进
  3. 如果需要函数返回内容,则写在return后
  4. 函数内的参数是局部参数,之后不可以直接使用函数内的参数
  5. 传入的参数可以在定义时指定默认值,如调用时希望修改,则可以直接在调用时传入新值

def 函数名(参数1, 参数2….):

命令

return XX

调用:
函数名(参数1, 参数2….)即可调用

1
2
3
4
def testfunction():
print('First function')
a = 1+2
print(a)
1
testfunction()
First function
3

定义函数时,可以先写为如下形式并构建框架,再修改pass补全内容。
def XXX(para1, para2…):
pass

6.Python自带常用函数与功能

6.1zip (for循环中同时循环多个量)

1
2
for i,j in zip(range(5),range(10,15)):
print([i,j])
[0, 10]
[1, 11]
[2, 12]
[3, 13]
[4, 14]

6.2enumerate (同时获取索引与数值)

1
2
for i,j in enumerate(range(10,15)):
print([i,j])
[0, 10]
[1, 11]
[2, 12]
[3, 13]
[4, 14]

6.3try…except …(试错或视为一种逻辑结构)

1
2
3
4
5
6
7
8
9
10
11
12
try:
file=open('eeee.txt','r+')
except Exception as e:
print(e)
response = input('do you want to create a new file:')
if response=='y':
file=open('eeee.txt','w')
else:
pass
else:
file.write('ssss')
file.close()

6.4 continue与break (结束循环)

continue结束当前次循环,进入下一次循环

break结束整个循环

continue与break的原理与C++中一致

6.5 map(绑定函数与参数得到结果)

1
2
3
def add(x,y):
return (x+y)
list(map(add,[1],[2]))
[3]

6.6lambda(简单方法定义函数)

实现代码的简化

1
2
3
4
add= lambda x,y:x+y
x=int(input('x=')) #这里要定义int整数,否则会默认为字符串
y=int(input('y='))
print(add(x,y))
x=4
y=5
9