1.python软件配置—jupyter notebook
本文使用的软件为Jupyter notebook ,如果你是小白,那么建议你通过安装Anaconda来解决Jupyter Notebook的安装问题,因为Anaconda已经自动为你安装了Jupter Notebook及其他工具,还有python中超过180个科学包及其依赖项。启动jupyter notebook一般是通过Anaconda Prompt(Anconda3)命令行输入
jupyter notebook
安装好Ancondas,在Anaconda Prompt(Anconda3)中把pip升级指令
1.把pip升级到最新版本
Python 3.x
pip3 install --upgrade pip
pip install --upgrade pip
2. 安装Jupyter Notebook
pip3 install jupyter
pip install jupyter
3.jupyter notebook启动
在终端中输入以下命令: jupyter notebook 执行命令之后,在终端中将会显示一系列notebook的服务器信息,同时浏览器将会自动启动Jupyter Notebook。
启动过程中终端显示内容如下:
$ jupyter notebook
[I 08:58:24.417 NotebookApp] Serving notebooks from local directory: /Users/catherine
[I 08:58:24.417 NotebookApp] 0 active kernels
[I 08:58:24.417 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/
[I 08:58:24.417 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
- 注意:之后在Jupyter Notebook的所有操作,都请保持终端不要关闭,因为一旦关闭终端,就会断开与本地服务器的链接,你将无法在Jupyter Notebook中进行其他操作啦。
浏览器地址栏中默认地将会显示:http://localhost:8888。其中,“localhost”指的是本机,“8888”则是端口号。 如果你同时启动了多个Jupyter Notebook,由于默认端口“8888”被占用,因此地址栏中的数字将从“8888”起,每多启动一个Jupyter Notebook数字就加1,如“8889”、“8890”…… 大概的jupyter notebook介绍到这里 如果大家想看详细的介绍,给你们找了一个专栏介绍 :Jupyter Notebook介绍、安装及使用教程
2 python基础语法
2.1 数字和字符串定义方法
- 定义数字
b = 100
- 定义字符串
k = 'hello world'
2.2 布尔数据类型bool
布尔数据类型就是我们常说的真和假,只有两个值构成,True和False
a = True
b = False
判断表达式
100 < 300
out[1] :True
2.3 jupyter默认输出功能
默认,代码的最后一行,如果能够输出变量内容,就会自动输出
a = 1
b = 2
a+b
out[]: 3
2.4 print( )打印功能
print是打印的意思,在这里指的是向屏幕上输出指定的文字
print 可以打印单个值,也可以打印多个值,还可以设置以什么字符作为多个值之间的分隔.
print('iron Man', 'Spideman','Hulk',sep='===>',end='....')
print('Captain',end='....')
print('Superman')
print('Batman')
iron Man===>Spideman===>Hulk....Captain....Superman
Batman
注释:
- sep表示 string inserted between values, default a space.(值之间插入的字符串,默认为空格)
- end表示string appended after the last value, default a newline.结尾字符串附加在最后一个值之后,默认为换行符
2.5 shift+tab 查看帮助文档
shift+tab
?print
2.6 tab补全代码功能(重点)
- 重点: 查看帮助文档的方法
- 不仅可以注释还可以作为循环语句的对齐功能
2.7 python注释功能
- 可以采用#直接注释
- 可以采用**ctrl+?**进行注释(一般进行多行注释采用这个)
2.8 input输入
在上面的部分我们实际上已经学习过了输出功能print, 那么下面让我们来看一下输入功能input函数的使用方法
a = input('请输入您的姓名')
请输入您的姓名zhangsan
可以配合float与int一起使用
b = int( input('输入一个数字:') )
type(b)
输入一个数字:333
int
3. 变量
- python是动态数据类型
- python中的变量不需要声明, 直接赋值就可以使用
- 变量在使用之前必须进行赋值
- Python会根据你赋给的值自动判断变量的数据类型
- 其实变量并没有什么类型
- 变量只是指向了一个内存地址, 内存地址中储存了我们的数据, 这个数据是具有数据类型的
- 变量可以重复赋值, 后面的值会覆盖前边的值
- 改变变量的值, 其实就是改变了变量指向的内存地址!
要理解变量,一定要理解数据在内存中的储存形式,变量只是一个对在内存中储存的某一个东西的指引
变量指引的位置可以变化,这是变量的值就会发生变化
当我使用变量,实际上是相当于在使用变量指向的那个内存地址中的值.
3.1 变量的赋值
a = 666
3.2 变量的命名规则
重点: 变量命名规则:
- 变量名的长度不受限制,但其中的字符必须是字母、数字、或者下划线_,而不能使用空格、连字符、标点符号、引号或其他字符。
- 变量名的第一个字符不能是数字,而必须是字母或下划线。
- Python区分大小写。
- 不能将Python关键字用作变量名。
Abc = 1
abc = 2
Abc
1
abc
2
3.3 内部保留关键字
这些都是内部关键词
import keyword
print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await',
'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']
3.4 已存在函数名
sum((2,3))
5
sum = 1
sum((2,3))
这样的sum((2,3))会报错,因为sum不是上面常用的内部关键词,所以sum可以赋值,所以再把sum当成求和函数就会报错了
3.5 同时为多个变量赋值(不常用)
a = b = c = "可以"
3.6 变量的交换特殊语法
a = 1
b = 2
temp = a
a = b
b = temp
4. 标准数据类型
就像我们平时说的, 小数, 整数, 复数之间的区别一样, 在每种编程语言中, 数据都可以以不同的形式储存在内存中, 这些不同的形式就叫做数据类型.
用不同数据类型储存的数据, 具有不同的储存结构, 对应的也就有不同的使用方法和功能.
下面让我们来看一下python中的常用数据类型
python中常用的数据类型有
- 数字(Numbers)整数int, 浮点数float, 复数complex
- 布尔(Booleans)函数为bool, 含有的值为True和False
- 字符串(Strings)函数为str , Uniconde字符序列, 在引号内包含
- 列表(list)有序的值的序列
- 元组(tuple)有序的值的序列且不可改变
- 字典(Dictionaries)函数为dict, 无序的键值对的组合
- 集合(Sets)函数为set, 无序的不含重复值的序列
4.1数字类型
int 整数型 float浮点型 complex复数
4.1.1 整数型int
Python的整数长度没有限制,通常是连续分配的内存空间。
a = 256
type(a)
int
4.1.2 浮点型float
浮点型就是我们常说的小数型
k = 3.1
type(k)
float
4.1.3 复数complex
复数包括虚部与实部
complex(2)
(2+j0)
4.2 数字类型的转换
4.2.1 浮点型float转化为整数int
int(7.8)
7
4.2.2 浮点型float转化为整数Int
int(float('666.6'))
4.3 数值的计算
下面以a=10 ,b=20为例进行计算
运算符 | 描述 | 实例 |
---|
+ | 加 | 两个对象相加 a + b 输出结果 30 | - | 减 | 得到负数或是一个数减去另一个数 a - b 输出结果 -10 | * | 乘 | 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200 | / | 除 | x除以y b / a 输出结果 2 | // | 取整除 | 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0 | % | 取余 | 返回除法的余数 b % a 输出结果 0 | ** | 幂 | 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000 |
4.4 运算的优先级
乘除大于加减
指数运算大于乘除
(3 + 4) * (2 + 3)
35
4.5 math科学计算库
| python内置的一些计算函数: |
---|
abs(x) | 返回x的绝对值,类型随x | max(n1, n2, …) | 返回最大值 | min(n1, n2, …) | 返回最小值 | round(x [,n]) | 默认返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的n位。例如round(1.23456, 3)返回1.235 |
| python还提供科学计算等库,例如math,导入math库后,常用的函数有: |
---|
fabs(x) | 返回x的绝对值,类型是浮点数 | ceil(x) | 取x的上入整数,如math.ceil(4.1)返回5 | floor(x) | 取x的下入整数,如math.floor(4.9)返回4 | exp(x) | 返回e的x次幂,e是自然常数 | sqrt(x) | 返回x的平方根,返回值是float类型 | modf(x) | 返回x的整数部分和小数部分,两部分的符号与x相同,整数部分以浮点型表示。例如math.modf(4.333),返回元组(0.3330000000000002, 4.0) | log10(x) | 返回以10为基数的x的对数,返回值类型是浮点数 | log(x,y) | 返回以y为基数的x的对数,返回值类型是浮点数 | pow(x, y) | 返回x的y次幂,即x**y |
4.6 复合赋值运算符
运算符 | 描述 | 实例 |
---|
+= | 加法赋值运算符 | c += a 等效于 c = c + a | -= | 减法赋值运算符 | c -= a 等效于 c = c - a | *= | 乘法赋值运算符 | c *= a 等效于 c = c * a | /= | 除法赋值运算符 | c /= a 等效于 c = c / a | %= | 取模赋值运算符 | c %= a 等效于 c = c % a | ** = | 幂赋值运算符 | c ** = a 等效于 c = c ** a | //= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
4.7 python比较运算符
运算符 | 描述 | 示例 |
---|
== | 检查两个操作数的值是否相等,如果是则条件变为真。 | 如a=3,b=3则(a == b) 为 true. | != | 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 | 如a=1,b=3则(a != b) 为 true. | > | 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 | 如a=7,b=3则(a > b) 为 true. | < | 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 | 如a=7,b=3则(a < b) 为 false. | >= | 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 | 如a=3,b=3则(a >= b) 为 true. | <= | 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 | 如a=3,b=3则(a <= b) 为 true. |
4.8 逻辑运算符
运算符 | 逻辑表达式 | 描述 | 实例 |
---|
and | x and y | 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 | (a and b) 返回 20。 | or | x or y | 布尔"或" - 如果 x 是 True,它返回 True,否则它返回 y 的计算值。 | (a or b) 返回 10。 | not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
a = 3
b = 4
c = 5
(a < 4) and (b != 4)
False
4.9 字符串
字符串是指以"“双引号, 或者’'单引号括起来的任意文本, 例如"abaa”, '1232’凡是在引号中的都是字符串
s = "你好"
d = '也可以'
4.10 长字符串
当字符串比较长,一行写不下,需要换行的时候,可以使用长字符串
s_length = """知而不行,谓之不诚。
行而不成,谓之不能。
知而行,是赤诚之心,行而能,是贯彻到底,已经很难被其他人和事影响了。
而知行合一的前提是,格物致知,将一件事研究到极致,变成自己的知识。
比如做菜,将做菜这门手艺做到尽善尽美,色香味无可挑剔;比如建筑,将楼宇亭台建得坚固美观使用,美轮美奂,风雨不倒地震不塌;比如造船,将造船原理吃透,用料坚固,风浪不沉。
这便是格物致知,将一件东西一件事情研究到极点,明白其中所有的道理。
做到格物致知,方能知行合一。
"""
4.11 单引号和双引号以及引号冲突问题
s3 = "abc"
s4 = 'bcd'
当字符串本身内容中包含有引号时,可能会引起引号冲突
s5 = "Rose:"You""
s5
报错如下
File "<ipython-input-24-7c528ab94020>", line 1
s5 = "Rose:"You""
^
SyntaxError: invalid syntax
转义字符有很多,这里介绍几个常见的
- \n 表示换行
- \t 表示制表符
- \ 转义反斜杠
- " 把引号转义成普通字符串
转义字符如可以把本身没有含义的普通字符转换成特殊功能字符,也可以把本身有特殊功能的字符转换成普通字符。 - 将有特殊涵义的符号,转换成没有特殊含义的
- 将没有特殊含义的符号,转换成有特殊含义的符号
此时程序会报错,需要对程序进行转义
4.11.1 转义符号’’
\ 转义反斜杠
s5 = "Rose:\"You jump,I jump!\""
s5
'Rose:"You jump,I jump!"'
4.11.2 转义字符\n
\n 表示换行
4.11.3 制表符\t
\t 表示制表符
4.11.4 " " 把引号转义成普通字符串
" 把引号转义成普通字符串
4.11.5 r’'对字符串不转义
python中也可以用r’'这种语法创建原生字符串,原生字符串中的字符串不进行转义
print(r'前边添加一个r,字符串\n里面的\t反斜杠不生效')
前边添加一个r,字符串\n里面的\t反斜杠不生效
4.12 字符串的数据类型和函数
type("a")
str
注: 字符串也是一个可迭代对象, 迭代次数就是字符串的字符数
4.13 字符串的拼接和重复
字符串 使用 + 相当于拼接两个字符串
字符串 * n , 相当于把字符串重复n次
"梅西" + "C罗"
'梅西C罗'
'3'+'4'
'34'
4.14 字符串的索引和切片(重点)
字符串也是一个可迭代对象, 也就是说每一个字符串实际上都有一个对应的索引值。
索引值从零开始计算,每一个字符对应一个唯一的索引值。
索引值也可以从后往前算,后面从负一开始计算。
test = "零一二三四五六七八九"
test[0]
'零'
有的时候我不仅仅想取出字符串的其中一个字符,想要取出其中一部分,这时候应该怎么做呢?
字符串切片的标准语法:
string[开始位置:终止位置:步长和方向]
注意:选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身)。
这里以字符串为例进行讲解,实际上列表也会具有相同的方法.
4.15 字符串方法
字符串的方法很多,这里只讲一些比较常用的字符串处理方法
4.15.1 查找索引值find
检测 str 是否包含在 mystr中,如果是返回开始的索引值,否则返回-1
mystr.find(str, start=0, end=len(mystr))
案例
s_find = "abcdefgabc"
s_find.find('d')
3
4.15.2 查找出现次数count
返回 str在start和end之间 在 mystr里面出现的次数
mystr.count(str, start=0, end=len(mystr))
案例
s_test = """御剑乘风来,除魔天地间,
有酒乐逍遥,无酒我亦颠,
一饮尽江河,再饮吞日月,
千杯醉不倒,唯我酒剑仙。"""
s_test.count(',')
7
4.15.3 替换replace
把 mystr 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次.
mystr.replace(str1, str2, mystr.count(str1))
案例
s10 = """桃花坞里桃花庵,桃花庵里桃花仙;桃花仙人种桃树,又摘桃花换酒钱。
酒醒只在花前坐,酒醉还来花下眠;半醒半醉日复日,花落花开年复年。
但愿老死花酒间,不愿鞠躬车马前;车尘马足贵者趣,酒盏花枝贫者缘。
若将富贵比贫贱,一在平地一在天;若将贫贱比车马,他得驱驰我得闲。
世人笑我太疯癫,我笑世人看不穿;不见五陵豪杰墓,无花无酒锄作田。"""
print(s10.replace('桃花','荷花',-1))
荷花坞里荷花庵,荷花庵里荷花仙;荷花仙人种桃树,又摘荷花换酒钱。
酒醒只在花前坐,酒醉还来花下眠;半醒半醉日复日,花落花开年复年。
但愿老死花酒间,不愿鞠躬车马前;车尘马足贵者趣,酒盏花枝贫者缘。
若将富贵比贫贱,一在平地一在天;若将贫贱比车马,他得驱驰我得闲。
世人笑我太疯癫,我笑世人看不穿;不见五陵豪杰墓,无花无酒锄作田。
4.15.4 切割片split
以 str 为分隔符切片 mystr,如果 maxsplit有指定值,则仅分隔 maxsplit 个子字符串
mystr.split(str=" ", 2)
案例
s10 = """桃花坞里桃花庵,桃花庵里桃花仙;桃花仙人种桃树,又摘桃花换酒钱。
酒醒只在花前坐,酒醉还来花下眠;半醒半醉日复日,花落花开年复年。
但愿老死花酒间,不愿鞠躬车马前;车尘马足贵者趣,酒盏花枝贫者缘。
若将富贵比贫贱,一在平地一在天;若将贫贱比车马,他得驱驰我得闲。
世人笑我太疯癫,我笑世人看不穿;不见五陵豪杰墓,无花无酒锄作田。"""
s10.split(',')
['桃花坞里桃花庵',
'桃花庵里桃花仙;桃花仙人种桃树',
'又摘桃花换酒钱。\n酒醒只在花前坐',
'酒醉还来花下眠;半醒半醉日复日',
'花落花开年复年。\n但愿老死花酒间',
'不愿鞠躬车马前;车尘马足贵者趣',
'酒盏花枝贫者缘。\n若将富贵比贫贱',
'一在平地一在天;若将贫贱比车马',
'他得驱驰我得闲。\n世人笑我太疯癫',
'我笑世人看不穿;不见五陵豪杰墓',
'无花无酒锄作田。']
4.15.5 按照行切割splitlines 按照行分隔,返回一个包含各行作为元素的列表
mystr.splitlines()
案例
split_test = """When you are old and grey and full of sleep,
And nodding by the fire,take down this book,
And slowly read,and dream of the soft look
Your eyes had once,and of their shadows deep;
How many loved your moments of glad grace,
And loved your beauty with love false or true,
But one man loved the pilgrim Soul in you
And loved the sorrows of your changing face;
And bending down beside the glowing bars,
Murmur,a little sadly,how Love fled
And paced upon the mountains overhead
And hid his face amid a crowd of stars."""
split_test.splitlines()
['When you are old and grey and full of sleep,',
'And nodding by the fire,take down this book,',
'And slowly read,and dream of the soft look ',
'Your eyes had once,and of their shadows deep; ',
'How many loved your moments of glad grace, ',
'And loved your beauty with love false or true,',
'But one man loved the pilgrim Soul in you',
'And loved the sorrows of your changing face;',
'And bending down beside the glowing bars,',
'Murmur,a little sadly,how Love fled',
'And paced upon the mountains overhead',
'And hid his face amid a crowd of stars.']
4.16 字符串的格式化format
a = "美丽的"
b = "你在哪里"
"你好吗, {}张小姐{}".format(a,b)
'你好吗, 美丽的张小姐你在哪里'
4.17 将大写转化为小写lower
转换 mystr 中所有大写字符为小写 mystr.lower()
a = "ADFEdifeiASF"
a.lower()
'adfedifeiasf'
4.18 将小写转化为大写lower
转换 mystr 中的小写字母为大写 mystr.upper()
a = "ADFEdifeiASF"
a.upper()
'ADFEDIFEIASF'
4.19 删除字符串的空白符strip
删除mystr字符串两端的空白字符,字符串中间的字符不会删除
4.20 插入字符串join
mystr 中每个字符后面插入str,构造出一个新的字符串
mystr.join(str)
案例
"-->".join("河南大学在开封")
'河-->南-->大-->学-->在-->开-->封'
4.21 判断字符串内的元素类型
4.21.1 isalpha
如果 mystr 所有字符都是字母 则返回 True,否则返回 False
mystr.isalpha()
4.21.2 isdigit
如果 mystr 只包含数字则返回 True 否则返回 False.
mystr.isdigit()
4.21.3 isalnum
如果 mystr 所有字符都是字母或数字则返回 True,否则返回 False
mystr.isalnum()
4.21.4 isspace
如果 mystr 中只包含空格,则返回 True,否则返回 False.
mystr.isspace()
5. 控制流语句
顺序语句
5.1 if条件判断
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:
if <条件判断表达式>:
<当上面的代码成立时,运行代码>
案例 根据Python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做。
也可以给if添加一个else语句,意思是,如果if判断是False,不要执行if的内容,去把else执行了:
a=8
if a<6 :
print("a")
else:
print(a)
8
elif是else if的缩写,完全可以有多个elif,所以if语句的完整形式就是: 所以if语句的完整形式就是:
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
if语句执行有个特点,它是从上往下判断,如果在某个判断上是True,把该判断对应的语句执行后,就忽略掉剩下的elif和else
5.2 布尔类型bool
布尔类型和其他数据类型之间的转换关系 所有空值为假,其他为真 if判断条件还可以简写,比如写:
if x:
print('True')
只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。
5.3 if嵌套
if嵌套的格式
if 条件1:
满足条件1 做的事情1
满足条件1 做的事情2
...(省略)...
if 条件2:
满足条件2 做的事情1
满足条件2 做的事情2
...(省略)...
案例
ticket = True
danger_thing = True
if not danger_thing:
print('没有危险物品可以进站')
if ticket:
print("恭喜上车")
else:
print('请出去')
else:
print('请跟我走一趟')
请跟我走一趟
5.4 列表
当我们有一百个变量要储存起来的时候,总不能弄一百个变量啊,怎么办的,用列表.
我们可以对列表这样去理解, 就把它当成一个大桶, 当我们有一堆东西需要找个地方临时存放在一起, 以便后续进行排序, 筛选,提取等操作时, 就弄一个列表, 先放进去.
s = [1,2,3,4,5,6,7,8,9,10]
s2 = ['临','兵','斗','者','皆','列','阵','在','前']
列表中的元素,没有数据类型的限制,可以为任何数据类型
list1 = [1, 2, 3,'on','go',True,False,None]
5.5 循环语句
5.5.1 for 循环
for i in range(100):
print("我错了")
5.5.2 while循环
i = 0
while i < 100:
print("我错了")
i += 1
5.5.3 for循环
for循环和编程语言中常见的循环不太一样,它实际上不是一个循环,而是一个遍历功能,会依次对一个可迭代的数据中的每一个数据进行操作. 在Python中 for循环可以遍历任何序列的项目,如一个列表或者一个字符串等。 for循环的格式
for 临时变量 in 列表或者字符串等:
循环满足条件时执行的代码
for student_name in ['张三' , '李四' , '王五']:
print(student_name[0] )
print('-'*30)
张
------------------------------
李
------------------------------
王
------------------------------
5.5.4 range列表
range(10)
list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
5.6 while循环
while 条件表达式:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
i = 0
while i < 5:
print('我错了')
i += 1
print('运行后面的代码')
我错了
我错了
我错了
我错了
我错了
运行后面的代码
5.7 break退出本层循环
name = '我想要去打游戏,不想学习'
for i in name:
if i == ',':
break
print(i)
print('------')
我
------
想
------
要
------
去
------
打
------
游
------
戏
------
5.8 continue
结束本"次"循环
continue的作用:用来结束本次循环,紧接着执行下一次的循环
name = '我想要去打游戏,不想学习'
for i in name:
if i == ',':
continue
print(i)
我
想
要
去
打
游
戏
不
想
学
习
|