文章目录
一、从计算机到Python1.计算机与程序思维
计算机最核心的三个部分为CPU、内存和硬盘,都在主板上面,除此之外,还包括键盘、鼠标等输入设备和屏幕等输出设备,如下:
CPU用于进行计算,硬盘用于存储数据和文件,内存(包括缓存)用于连接CPU和硬盘,作为两者的缓冲,可以加快读取和处理速率。
冯·诺依曼架构如下:
计算机通过输入逐行读取命令并执行,有输出则输出结果,程序是指定如何执行计算的一系列指令,可以说,程序就是写给计算机的菜谱。
y是x的平方根,当且仅当y*y=x
很明显,思维是不完全一致的。 在人的语言中,很多语句存在歧义,计算机不一定能理解,因此需要专门的编程语言。
有一个典型的笑话:
老婆给当程序员的老公打电话:“下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。”当晚,程序员老公手捧一个包子进了家门。。。老婆怒道:“你怎么就买了一个包子?!”老公答曰:“因为看到了卖西瓜的。”
这虽然是一个笑话,但是可以看出计算机语言需要精确的表达,如果存在歧义就可能会出现不一样的结果。
程序员在码代码时经常会思考两个问题: (1)It doesn’t work,…,why? (2)It works,…,why? 这也是程序员很正常的状态。
程序员发展道路可以如下:
- 学习基本语法
- 读别人的代码
- 修改别人的代码
- 开始写自己的小程序
- 参与开源项目
写程序应该遵循以下步骤:
- 问题表述 有什么,要实现什么。
- 设计计划 如何实现,需要什么。
- 编码与调试 编码与错误验证。
- 评价 评价是否合理。
- 改进(重构) 优化或重新编写。
编程语言的元素如下:
- 词汇 变量Variables和保留词汇Reserved words。 Python中的保留词汇包括FALSE、class、is、finally、return、None、if、for、lambda、continue、True、def、from、while、nonlocal、and、del、global、with、not、elif、yield、try、as、or、else、assert、import、pass、break、in、raise、except等。
- 句子结构
- 语法Syntax
- 语义Semantics
- 程序结构 为某个目的构造程序。
程序中的基本指令包括:
- input数据输入 从键盘、文件或其他设备获取数据。
- output输出 在屏幕上显示数据或将数据发送到文件或其他设备。
- math计算 执行基本的数学运算,如加法和乘法。
- conditional execution条件执行 检查某些情况并执行适当的代码。
- repetition重复 重复地做一些动作,通常有一些变化。
其中,后两者用于控制逻辑。
程序中常见的基本数据类型如下:
- Integers整型 -3、100等整数。
- Floats浮点型 lntegers 带小数点的数字,如3.14159,或某些指数,如1.0e8或10000.0。
- Booleans布尔型 其值为True或False。
- Strings字符串 文本字符序列。
2.Python的特点和应用
Python是一门计算机程序语言,可以理解为人对计算机的指令。
Python之所以这么火,与它的特点有关:
- 简洁美观
- 广泛的第三方库支持 很多人基于Python开发出现成的功能,别人可以直接使用,并且体系逐渐完善,使用起来越来越方便。
- 支持大多数现代云平台
- 最新机器学习框架
Python的典型应用包括数据分析、软件开发两大领域: Python中有很多库支持数据分析,包括numpy、pandas、scipy、matplotlib、networkx等; 支持软件开发的库包括Django、Flask和Pyramid等,包括Dropbox、Youtube、Instagram、豆瓣、知乎、魔兽世界等网站和应用都是完全或部分使用Python实现的。
虽然对于视频流、3D游戏等应用,Python还是存在一定的局限,但是它的确有着广泛的应用,所以在IT领域的各个子领域可以使用Python这同一门语言。 Python比较年轻,但是发展迅速,并且从2010年以后由于数据分析等应用得到了快速发展。 同时由于其开源免费,相比于SAS等其他语言,能够更容易被使用者接受,进一步扩大了其应用。
为什么会选择Python作为入门和开发语言:
- 易学
- 简单性与可读性
- 包支持
- 更快
3.工具选择和安装
Python存在Python2和Python3两个版本,现在Python2已经停止更新,Python3已逐渐成为主流。 Python最常用的IDE(集成开发环境,lntegrated Development Environment)是PyCharm,但是只有专业版(付费)才支持科学计算和数据分析,社区版(免费)不支持科学计算,因此进行数据分析和科学计算还有其他选择,这里选择专业的科学分析工具集Anaconda,并且选择Python3版本。
由于在官网中下载较慢,因此我已经将Anaconda安装包下载整理好了,可以直接加QQ群 963624318 在群文件夹Python相关安装包中下载即可。
安装和普通软件安装类似,直接点下一步即可,只是需要注意,在选择是否添加环境变量时需要勾选,这样就可以直接在命令行中执行相关命令,在Anaconda安装好之后,Python也自动安装,并且安装了科学计算一般所需要的库,不需要自己再专门安装。
WIN
对于编写代码,有三个层次的工具:
Read-Evalulate-Print Loop
4.Jupyter Notebook的基本使用
WIN
会弹出一个窗口,接下来按下面示意操作即可打开jupyter notebook:
cd XXXjupyter notebook
基础操作如下:
也可以新建notebook文件,示意如下:
CTRL+EnterShift+ENter[]*
还有进一步操作:
CTRL+Enter
二、Python的简单使用1.print函数的使用
hello world
print("Hello World! 你好,世界! Hola mundo!")
输出:
Hello World! 你好,世界! Hola mundo!
ipynb
输入:
print("Hello World!")
print("Hello Again")
print("This is the 3rd line, \n","and this is also the 3rd line.")
print("This is the 3rd line, \
and this is also the 3rd line.")
输出:
Hello World!
Hello Again
This is the 3rd line,
and this is also the 3rd line.
This is the 3rd line, and this is also the 3rd line.
\n\
2.notebook中进行计算
notebook最主要的功能就是进行计算和数据分析。 输入:
4+5
输出:
9
再如:
print(4-5)
print(4*5)
输出:
-1
20
如果代码中存在错误会抛出异常,例如:
print(8 + )
输出:
File "<ipython-input-6-74de9a467743>", line 1
print(8 + )
^
SyntaxError: invalid syntax
显然,没有输出结果,反而提示语法错误; 需要满足运算的条件。
但是下面就不会报错:
print('8+')
打印:
8+
''""
再如:
110/12.97
输出:
8.481110254433307
但是输出时,最后一次操作的结果将自动打印出来,前面的代码执行但是不输出。 如下:
111*222
333*444
输出:
147852
333*444111*222print()
print(111*222)
print(333*444)
输出:
24642
147852
display()
display(111*222, 333*444)
输出:
24642
147852
3.Python基本语法规范
编程都应该遵循一定的代码规范,这样既可以美化代码,也可以让别人更加直观地阅读代码、不至于不理解或产生误会。 Python也一样,有自己的规范,即为PEP8(Python Enhancement Proposal 8,Python8号增强方案),规定了优雅的Python代码应该具有的格式。
=
number_of_cars = 34
即是将34赋值给变量number_of_cars,以后number_of_cars即代表数值34。
Python中,有时候空格是有意义的,一般代码用4个空格或者制表符Tab进行缩进、控制代码结构。 如下:
x = 8
if x < 7:
print(x)
会报错:
File "<ipython-input-13-29d07b2c12b7>", line 4
print(x)
^
IndentationError: expected an indented block
修改为如下就不会报错:
x = 8
if x < 7:
print(x)
同时需要注意语义上的问题,避免出现语意和逻辑上的错误。 如下:
x=8
if x < 7:
print("x is smaller than 7")
print("x is bigger than 7")
显然,这虽然不会报错,但是在语义上是有问题的。
在Python中,一切都是作为对象实现的: 我们可以将一个对象看作一个包含一段数据的盒子; 对象的类型决定了可以对对象(数据)执行的操作,例如,数字可以进行四则运算。
在赋值运算符左侧的为变量,右侧的是值,右侧也可以是变量。 如下:
speed_of_liuxiang=110/12.97
distance= 1000
time = distance/speed_of_liuxiang
print(time)
print(time/60)
输出:
117.9090909090909
1.965151515151515
110/12.97speed_of_liuxiang=
对象在盒子中,盒子上的标签就是变量,可以引用到对象。
三、Python基本数值数据类型Python中有4种内置数值数据类型:
- 整型int
- 浮点型float
- 布尔型bool
- 字符串str
1.整型
整型即整数。
输入:
123
输出:
123
05
File "<ipython-input-21-65e6e002a62d>", line 1
05
^
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers
所以整型不能以0开头。
输入:
123,456,789
输出:
(123, 456, 789)
此时数据类型已经改变,不再是整型,而是元组。
对于整型的运算如下:
a = 5
a += 2
display(1 + 2, a, a-3,9//5,9/5,9%5,2+3*4)
输出:
3
7
4
1
1.8
4
14
a += 2a = a + 2///%
在Python3中,int可以处理任何整数,无论它有多大,而不会导致溢出。 如下:
a = 10**100
display(a, a*a)
输出:
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
**
还可以转化为其他进制:
display(10,0b10,0o10,0x10)
输出:
10
2
8
16
0b0o0x
2.浮点型
浮点型即小数。
type(variable)type(1)type(1.2)
输入:
a = 98.5
type(a)
输出:
float
9.8125e2981.25
import math
使用示意如下:
import math
display(math.pi, math.e, math.floor(98.6), math.ceil(98.6), math.pow(2, 3), 2**3, math.sqrt(25))
输出:
3.141592653589793
2.718281828459045
98
99
8.0
8
5.0
math.pow()**
3.布尔型
布尔型只有两个值,即True和False,表示逻辑判断的真假。
运算如下:
display(type(1 < 2), (2 < 1) or (1 < 2), not (2 < 1), (2 < 1) and (1 < 2), (2 == 1), (2 != 1))
输出:
bool
True
True
False
False
True
ornotand===
4.字符串
字符串是Python中众多序列中的一个,它是一个字符序列。
输入:
s = 'this is a string'
display(type(s), "this is also a string", "I'm a string")
输出:
str
'this is also a string'
"I'm a string"
可以看到,字符串可以由单引号或者双引号包裹、并且需要成对出现,使用上两者没什么区别,但是两者可以实现嵌套,即双引号中可以用单引号,单引号中可以用双引号。
\
s = "He said: \"I'm a string\""
print(s)
输出:
He said: "I'm a string"
可以看到,在双引号包含的字符串中也可以用双引号作为普通字符,这是通过转义实现的,转义即使需要转义的字符失去其特殊的意义、作为一个普通的字符。
转义字符还可以用于换行符等其他特殊字符,如下:
long_s = "You can put a long string that \ntakes up multiple lines here"
print(long_s)
输出:
You can put a long string that
takes up multiple lines here
用3层单引号或双引号即可实现字符串换行并保留原格式,如下;
s = '''
This is the first line
This is the second line
'''
print(s)
输出:
This is the first line
This is the second line
5.类型转换
不同的类型的数据之间可以进行类型转换。
浮点数转化为字符串如下:
a = str(98.6)
display(a,type(a))
输出:
'98.6'
str
再如:
display(str(True), float('98.6'), int('-123'))
输出:
'True'
98.6
-123
如果混合了不同的数值类型,Python将尝试进行转换再进行运算。 如下:
display(1 + 2.0, True + 3)
输出:
3.0
4
但是,一般不能将字符串与数字进行混合运算,除非操作有意义(字符串组合和重复); 同时,转化后的类型一般不能再进行转换之前所属类型的操作,如浮点数转换为字符串后,不能再进行数值运算。
如下:
3.88+"28"
输出:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-45-7c94633b599a> in <module>
----> 1 3.88+"28"
TypeError: unsupported operand type(s) for +: 'float' and 'str'
可以转化为相同的类型再进行计算:
print(int(3.88) + int("28"))
print(int(-2.95) + int("28"))
print(float(3) + float("28"))
print(str(3.88) + str(28))
输出:
31
26
31.0
3.8828
可以看到,字符串与字符串实际上是字符串的拼接。
四、字符串操作1.结合与重复
字符串可以进行结合与重复操作。 结合即字符串的拼接,如下:
template = "My name is"
name = "Corley"
greeting = template + " " + name + "."
print(greeting)
输出:
My name is Corley.
重复是将一个字符串重复指定次数,如下:
laugh = 5 * "Ha "
print(laugh)
输出:
Ha Ha Ha Ha Ha
2.提取与切片
字符串还可以进行提取和切片。 如下:
letters = "abcdefghijklmnopqrstuvwxyz"
letters[0]
输出:
'a'
其中0是下标,下标即各位字符位置的数字表示,范围是0到length-1(length是字符串的长度)。
如果下标超出范围会报错,如下:
letters = "hello world"
letters[25]
报错:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-51-17d500830d0d> in <module>
1 letters = "hello world"
----> 2 letters[25]
IndexError: string index out of range
还可以用负数下标,如下:
letters[-2]
输出:
'l'
负数表示从后往前计数,范围是从**-1到-length**。
[start:end:step]letters = "hello world"
方式 | 含义 | 举例输入 | 输出 |
---|---|---|---|
[:] | 提取整个字符串 | letters[:] | ‘hello world’ |
[start:] | 从start下标开始到结束 | display(letters[2:],letters[-3:]) | ‘llo world’\n’rld’ |
[:end] | 从开始到end-1下标 | display(letters[:5], letters[:100]) | ‘hello’\n’hello world’ |
[start:end] | 从start下标end-1下标 | display(letters[2:5],letters[-6:-2],letters[-2:-6]) | ‘llo’\n’ wor’\n’’ |
[start: end:step] | 从start下标end-1下标,以step为间隔跳过字符 | display(letters[1:5:2],letters[7:1:-2],letters[::7],letters[::-1]) | ‘el’\n’o l’\n’ho’\n’dlrow olleh’ |
[::-1]
3.获取长度
len()
如下:
len(letters)
输出:
11
4.分割和合并
split()
lan = "python ruby c c++ swift"
lan.split()
输出:
['python', 'ruby', 'c', 'c++', 'swift']
split()split()
todos = "download python, install, download ide, learn"
todos.split(', ')
输出:
['download python', 'install', 'download ide', 'learn']
join()
','.join(['download python', 'install', 'download ide', 'learn'])
输出:
'download python,install,download ide,learn'
5.替换
replace()
如下:
s = 'I like C. I like C++. She likes Python'
s.replace('like', 'hate')
输出:
'I hate C. I hate C++. She hates Python'
可以看到,所有like都被替换成hate。
还可以指定替换个数如下:
s.replace('like', 'hate', 2)
输出:
'I hate C. I hate C++. She likes Python'
显然,此时只替换了2次。
6.布局
字符串可以设置长度和对齐方式,如果字符串长度不够则用空格将前后补全。 如下:
align = 'Learn how to align'
display(align.center(30),align.ljust(30),align.rjust(30))
输出:
' Learn how to align '
'Learn how to align '
' Learn how to align'
可以看到,有居中、向左和向右对齐。
strip()
ralign = align.rjust(30)
ralign.strip()
输出:
'Learn how to align'
7.其他操作
py_desc = "Python description: Python is a programming language that lets you work quickly and integrate systems more effectively."
方法 | 含义 | 输入 | 输出 |
---|---|---|---|
startswith() | 字符串是否以某个子串开头 | py_desc.startswith(‘Python’) | True |
endswith() | 字符串是否以某个子串结尾 | py_desc.endswith(‘effectively’) | False |
find() | 字符串中某个子串第一次出现的位置 | py_desc.find(‘language’) | 44 |
isalnum() | 字符串是否只包含字母和数字 | py_desc.isalnum() | False |
count() | 字符串中某个子串出现的次数 | py_desc.count(“Python”) | 2 |
strip() | 去掉字符串开头和结尾的某个字符 | py_desc.strip(’.’) | ‘Python description: Python is a programming language that lets you work quickly and integrate systems more effectively’ |
upper() | 将一个字符串转化成大写形式 | py_desc.upper() | ‘PYTHON DESCRIPTION: PYTHON IS A PROGRAMMING LANGUAGE THAT LETS YOU WORK QUICKLY AND INTEGRATE SYSTEMS MORE EFFECTIVELY.’ |
title() | 将一个字符串转化为标题的形式,即单词的首字母大写 | py_desc.title() | ‘Python Description: Python Is A Programming Language That Lets You Work Quickly And Integrate Systems More Effectively.’ |