书接上回,本文将讨论以下几点,请看目录
5.7 运算符
5.7.1算数运算符
运算符 | 含义 | 举例 |
---|---|---|
+ | 加 | 1+1 |
- | 减 | 1-1 |
* | 乘 | 1*1 |
/ | 除 | 1/1 |
// | 整除 | 5//2 结果等于2 |
% | 取余 | 3%2 结果等于1 |
** | 指数 | 1**2 表示1 的二次方 |
() | 括号 | (1+2)**3 |
这些算数运算符其实在我们之前的求学生涯中早已见过,而较为特殊的——整除 在python当中取值规则为向下取整,就像例子中的 5//2 的计算值为2 。
当然这些运算符也存在优先级:
() 高于 ** 高于 * / // % 高于 + -
5.7.2 赋值运算符
在上册中,我们提及到计算机的 == 是判断两端是否相等的符号,而 = 才是用于赋值作用的运算符。而计算机中的赋值与我们日常习惯的从左到右不同,相反地赋值是从右往左。
num1=1
num2=2 #给变量num1 和 num2 赋值
print(num1) # 1
print(num2) # 2
print(num1==num2) # False
但是我们会发现,一行只能个一个变量赋值,是不是代码看起来有点繁琐了? 那接下来介绍一种多变量赋值。
num1,string1,float1=6,'fdt',3.14
print(num1, string1,float1)
# 6,'fdt',3.14
这样看起来就相对简洁点。如果我们想对不同变量进行相同赋值,又该怎么办呢?请看下面的例子。
a=b=100
print(a,b)
5.7.3 复合赋值运算符
简单来讲就是 结合上面算数运算符与赋值运算符两者,起到简便代码与方便运算的作用。
运算符 | 介绍 | 解释 |
---|---|---|
+= | 加一个数 | a+=1相当于 a=a+1 |
-= | 减一个数 | a-=1 相当于 a=a-1 |
*= | 乘一个数 | a*=1 相当于 a=a*1 |
/= | 除以一个数 | a/=1 相当于 a=a/1 |
//= | 整除一个数 | a//=1 相当于 a=a//1 |
%= | 对一个数取余 | a%=1 相当于 a=a%1 |
**= | 取一个数的次方 | a**=1 相当于 a=a**1 |
更详细地解释 就是对a的值 修改后 再赋值给a。
# 每段代码都是基于lys=18,而一起运行的时候并不为对于的结果
lys=18
lys+=1
print(lys) # 19
lys-=1
print(lys) # 17
lys*=2 #lys=lys*2
print(lys) # 36
5.7.4 比较运算符
比较运算符 就是结合大小于号与赋值符号的复合运算符。返回值就是前面提及的布尔类型(Ture、False)
运算符 | 解释 |
---|---|
> | 左值是否大于右值 |
< | 左值是否小于右值 |
== | 左右是否相等 |
!= | 左右是否不等 |
>= | 左值是否大于或等于右值 |
<= | 左值是否小于或等于右值 |
下面来看些例子。
a=5
b=9
print(a<b) #Ture
print(a>b) #Flase
print(a==b) #Flase
print(a!=b) #True
print(a>=b) #False
print(a<=b) #True
要注意的 像 != 是当两边不等的时候为True,反之为False。而像 >= 和 <= 这两个 存在一个或的关系,就是小于(大于)的情况成立和 等于的情况两者其一符合,即为True(有没有可能两个都符合呢?)。
5.7.5 逻辑运算符
跟比较运算符相类似的,逻辑运算符的返回值亦为布尔类型。
运算符 | 表达式 | 解释 |
---|---|---|
and | a and b | 两者都 |
or | a or b | 其中之一 |
not | not a | 非 |
in | a in b | 在其中 |
接下来通过例子给大家详细解读。
num1=10
num2=16
num3=18
print((num1<num2) and (num2<num3)) # True
print((num1>num2) and (num2<num3)) # Flase
print((num1>num2) or (num2<mnum3)) # True
print((num1<num2) and (num2<num3) and (num1<num3)) #True
我们可以看到举例中,通过and语句链接的全部表达式都为正确的情况下才会返回True。而or语句则是任意一个表达式正确则返回True。如果判读语句中又有or又有and语句的话,又该如何呢留给大家思考。
5.8 条件语句
条件语句顾名思义,需要存在一个判断条件,拿人话讲就是:凡事都有个是非对错,因此条件语句的返回值通常是布尔类型(True 或 False)。
5.8.1 if语句格式
对于格式而言,缩进很重要,这意味着 语句是否在上一 if语句 中
if 条件语句:
条件成立时执行的代码
num=9
if num<3:
print('num smaller than 3')
print(num)
# 9
如例子中所展现的,无论num是否大于3 ,最后的print语句都会执行,所以缩进很重要,因为这表示归属问题。
5.8.2 条件语句举例
num1=10
if num1>2:
print('number is bigger than 2')
# number is bigger than 2
例子非常的简单,但是大家应该也发现了问题。万一,不符合条件怎么办? 小问题,python或者其他语言早已帮你想好对策,那就是else语句。
我的班长喜欢小美,他给小美表白,小美便有两种选择,答应班长或者拒绝班长。这就是if-else语句的现实举例。下面来看代码。
num2=910
if num2<909:
print('num2 is smaller than 909')
else :
print('num2 is biiger than 909')
# 'num2 is bigger than 909'
是的,当num2 进入条件语句中,先执行 num2 是否小于909 的判断语句 ,如果该语句为True(num2<909成立)则执行if语句后的指令 ;当该语句为
False( num2 <909 不成立 也就是说 num2 是大于或等于909的),则执行else语句后的指令。
当然也会存在条件语句不止一个的情况,所以还有一个语句就是elif语句,展开来讲的就是 else-if,表示另外一个条件 。直接看例子:
num3=75
if num3<60:
print('不及格')
elif num3>60 and num3<80:
print('良好')
else:
print('优秀')
# 优秀
正如例子所表示的 当存在多个条件语句去判断时,可以使用 elif语句。
5.8.3 三目运算符
表达式1 if 表达式2 else 表达式3
简单解释就是 当表达式1的值为True时 则执行表达式2 如果为False时 执行表达式3 。直接看例子:
num1=10
num2=20
print(num1>num2 if num2 else num1)
# 10
5.9 循环语句
循环一词大家并不陌生,就是不断重复一样的东西。
5.9.1 循环语句格式
在py中,有 for 循环 和 while 循环 ,两种格式实现的效果是一样的。
for 临时变量 in 表达式1:
重复执行的代码1
while 表达式1:
重复执行的代码2
5.9.2 for循环
格式如上,而实际上我们for循环是对字符串的拆解输出,我们直接来看例子:
letter1='lys'
for i in letter1:
print(i)
# l
# y
# s
可以看到在for循环中,我们对letter1 这个字符串中的字母逐个操作。当然,我们的循环也是需要遵循缩进的,就是表示归属问题。这只是对单词、对字符串的操作,那我们再往深一层想,要是要对数字操作,就是从 0取到10 又该怎么办呢?来看下面的例子:
numbers=[2,3,4,1,8]
for i in range(0,len(nunbers)):
print(numbers[i])
# 2
# 3
# 4
# 1
# 8
例子中我们将i当作下标索引使用,在range()语句中就是 i的取值:从0 到numbers的长度。而在range语句中0可以省略。当然我们不一定要从0开始索引,像从1,2,3任何小于numbers列表长度的开始都可以,甚至反过来取值亦可以。
5.9.3 while循环
正如我们前面讲到的 for循环和while 循环 得到结果其实一样。举个例子就是:班长给小美送花,当班长送够100支花,小美就答应做他女朋友,那我们直接来看例子。
i=0
while i<100
print(i)
i+=1
# 0~99
需要注意的是 while循环要是遗漏了对 i值的变化 容易进入死循环。
当然亦会存在中间就要中断循环的情况,就像接下来要讲的break和continue语句。
5.9.4 break语句
举个简单的例子就是:班长在送第99支花的时候,小美谈了男朋友,班长就停下了送花的脚步了。
接下来看代码:
i=0
while i<100:
print(i)
if i==99:
break
break语句是直接跳出上一层循环 去执行其他语句,而下面的continue语句则不同。
5.9.5 continue语句
continue语句再举一个例子就是:班长从第一天开始送花,到第六十天的时候睡懒觉忘记了送花。下面来看代码:
i=0
for i in range(100):
print(i)
if i==60:
continue
而这个for循环,执行到59的时候就会自动跳过60去执行输出61的操作。
了解了py的一些基础用法后,我们在这里拓展一部分看起来更贴合实际需要的具体操作。
5.10 文件读取与存储
文件,无论学生还是职工都是经常接触的,像word、excel、ppt简直就是文件三剑客。那我们要是想通过python对文件进行操作又能否实现呢?请继续看接下来的内容。
5.10.1 文件的基础操作
操作 | 格式 |
---|---|
打开文件 | open() |
关闭文件 | close() |
重命名文件 | rename() |
删除文件 | remove() |
创建文件夹 | mkdir() |
删除文件夹 | redir() |
获取当前目录 | getcwd() |
获取目录列表 | listdir() |
写入内容 | write() |
在python中打开文件后,一定要对文件进行关闭操作,否则会造成文件损坏或丢失的情况。讲这么多来看看例子。
import os
import pandas as pd
os.makedirs(os.path.join('..','data'),exist_ok=True)
#在pycharm项目列表里面创建一个data包 exist用于判读是否有文件与其重名
data_file=os.path.join('..','data','house_tiny.csv')
#这就是就类似于‘E:/lys.txt’ 这样的文件路径
with open (data_file,'w',encoding='UTF-8') as f:
f.write('Numrooms,Alley,Price\n')
f.write('NA,Pave,100\n')
f.write('2,NA,200\n')
f.write('4,NA,400\n')
f.write('NA,NA,1000\n')
data=pd.read_csv(data_file)
解释一下这段代码的含义:
首先import 这个语句是调用模块的作用,而模块当中存在封装好的函数可以给我们直接使用,那 os这个模块通常用于对文件的操作,上面列表中的大部分函数都在os模块当中,而pandas则是对数据进行字典化操作的模块(大家还记得我们在哪里讲到了字典吗)后面的 as可以理解为给pandas模块起外号 下次用它可以直接叫它外号。
马不停蹄,我们来看makedir()函数 就是在固有列表中创建一个文件夹用于储存我们操作的数据,path中文意思是路径,在这里表示把这个创建的文件夹放到某个地方去,‘data’就是给这个文件起的名字。
其实上面这两段都与我们这小节无关,但是还是希望大家努力理解一下。
而with open 语句就是对文件进行打开后 对文件操作后关闭,非常的便利。
open(参数1, 参数2,参数3)
参数1表示对某个文件进行操作,参数2有3种模式任君挑选。下面就是对参数2的解释。
格式 | 含义 |
---|---|
‘r’ | 表示对文件进行只读操作,不能修改 |
‘w’ | 对文件进行写入,(如果文件还不存在的话会创建这个文件) |
‘a’ | 对文件进行尾查操作,(同样的 不存在该文件便会自动创建) |
再看回我们的例子用的是 ‘w’,就是将后面的内容写入 名为‘data_file’ 的文件中。
参数3 这里不展开讲,大家就当作是小时候老师讲的固定搭配。
5.11 异常处理
异常在程序测试中经常出现,编写一个强壮稳健的程序的一方面就是有效的处理错误和异常,因此学会对异常进行预防是很有必要的,在这里我们结合上面讲到的文件来举例。
5.11.1异常的种类
这里给大家举几个常见的异常,更深入的了解需要大家参考Python标准库。
IOError | IO错误 |
IndexError | 索引错误 |
UnicodeError | 同一码错误 |
NameError | 名称错误 |
TypeError | 类型错误 |
SyntaxError | 语法错误 |
5.11.2 异常处理
这里直接给大家介绍最全面的异常处理。
格式
try:
不确认是否有异常的代码
except:
检查出异常执行的代码
finally:
无论有无异常都执行的代码
try:#捕获全部异常
f=open("E:/abc.txt","r",encoding="UTF-8")
except Exception as e:
print("出现异常 切换模式")
f=open("E:/abc.txt","w",encoding="UTF-8")
else:
print("没有异常时执行else语句")
finally:
f.close()
在面对较为简单的异常时,通常可以忽略else-finally语句且不会影响对异常的处理。
5.12 小结
综上,给大家介绍一些python的基础用法并且稍微拓展了一些,下册的撰写参考了大家提供的建议,十分感谢大家支持,小文的编写亦是我对知识理解,所提供的例子希望能帮助大家更容易去理解python基础语法,无论python是否为你的第一门编程语言,既然你对代码感兴趣且它能给你提供帮助,那我希望大家保持这份热情并延续到生活的各方面中,就像那位著名的TalkShow演员付航所说的Passion!