从Scratch到Python 05 数据运算

掌握了变量的定义与使用方法,以及不同的数据类型,我们就可以进行数据的运算了。在Scratch中,你会看到一系列的运算指令:

 

Python中当然比Scratch中支持的运算要丰富和强大得多。这一节我们就学习如何通过运算符进行数据运算。

一、Python中的运算符

Python数据之间的运算是通过不同的运算符实现的,包括算术运算符、赋值运算符、关系运算符、逻辑运算符。

算术运算符

算术运算符是指对数值进行加减乘除等算术运算的符号。 常用的运算符包括(假设a=3,b=2)

运算符 描述 举例 运算结果
+ 两个数相加 a+b 5
在一个数前表示负数或表示两数相减 a-b 1
* 两个数相乘 a * b 6
/ 表示一个数除以另一个数 a / b 1.5
% 取模,即两个数相除的余数 a % b 1
** 幂运算,返回一个数的多少次方 a ** b 9
// 整除,返回商的整数部分,即商向下取整 a // b 1

相对来说,算术运算符还是比较简单的,和Scratch中类似。但是要注意:

  • / 和 // 的区别。/ 会得到正常的商,// 会对商向下取整。什么是向下取整呢?就是取比实际的商小的最接近的整数。如果是正数,比如3 // 2会得到1,但如果是负数,就不一样了,-3 // 2 得 -2,因为-2才是比-1.5小一点的整数。
  • 3 ** 2是幂运算,如果你还没学过乘方,那就简单的认为 “**”运算符后面的数字代表有几个 “**” 前面的数字相乘。3 ** 2就是3 * 3,而3 ** 3就是3 * 3 * 3, 3 4就是3 * 3 * 3 * 3,依此类推。幂运算也可以用Python的内置函数 pow 代替,比如 pow(3,2)就是3 ** 2 的意思。

赋值运算符

简单的赋值运算符我们已经用过了,它用于完成“赋值运算”,即把“=”右侧的数值或计算结果赋值给左边的变量。 常用的赋值运算符包括(假设a=3, b=2):

运算符 描述 举例 运算结果
= 简单赋值运算 c = a + b c==5
+= 加法赋值运算 a += b 等价于 a = a + b,结果 a == 5
-= 减法赋值运算 a -= b 等价于 a = a – b,结果 a == 1
*= 乘法赋值运算 a *= b 等价于 a = a * b,结果 a == 6
/= 除法赋值运算 a /= b 等价于 a = a / b,结果 a == 1.5
%= 取模赋值运算 a %= b 等价于 a = a % b,结果 a == 1
//= 除法取整赋值运算 a //= b 等价于 a = a // b,结果 a == 1
**= 幂赋值运算 a **= b 等价于 a = a ** b,结果 a == 9

看了上面的例子,不难理解,除了简单赋值,我们其实就是把算术运算的结果再赋值给变量。那么有一个问题:a =3+2这样的表达式代表什么呢?由于赋值运算符右边可以视为一个整体,a =3+2就等价于a=a * (3+2),即a = a * 5,我们需要先把赋值运算符右侧的表达式算出来,再去和 a 进行运算,把结果再赋值给a, 所以a最终等于15。

关系运算符

关系运算符也称为比较运算符,用于对变量或表达式进行比较,如果比较结果为真,则返回True,如果为假则返回False。关系运算符通常用于条件语句作为判断条件。在Scratch中我们已经学过 =、>、<。Python中的关系运算符包括(假设a=3, b=2):

运算符 描述 举例 运算结果
== 比较两个变量是否相等 a == b False
!= 比较两个变量是否不相等 a != b True
> 左边的数是否大于右边 a > b True
< 左边的数是否小于右边 a < b False
<= 左边的数是否小于或等于右边 a <= b False

这里要强调的是,一定要注意Python中 “=” 号用来赋值,不用用来比较,这和Scratch是不一样的!要比较是否相待,记住用两个等号“==”!

逻辑运算符

逻辑运算符用于对真和假两种布尔值进行运算,结果仍为布尔值。我们在Scratch中学过了“与”、“或”、“不成立”,它对应着Python中三个逻辑运算符 and 、or 、not。

运算符 描述 举例 运算结果
and “与”运算 x and y x、y必须都为True,结果才为True,否则为False
or “或”运算 x or y x、y必须都为False,结果才为False,否则只要有一个为True,结果就是True
not “非”运算 not x 对x取反,如果x为True,结果为False;如果x为False,则结果为True

二、运算优先级

我们学习四则运算的时候,老师告诉我们要“先乘除、后加减”,这就是乘除运算的优先级要高于加减。在编程中也存在这个问题,不同的运算符放在一起,必须按照如下规则运算:

  • 优先级高的先执行,优先级低的后执行;
  • 同样优先级的运算符,先左后右;
  • 如果有括号,先对括号里面的内容进行运算。

Python中不同运算符的优先级从高到低顺序如下(同一行中运算符的优先级相同):

运算符 描述
** 算术运算符——幂运算
* 、/ 、% 、// 算术运算符——乘、除、取模、取整除
+ 、- 算术运算符——加、减
<、<= 、> 、>= 、== 、!= 关系运算符
not 逻辑运算符:非运算
and 逻辑运算符:与运算
or 逻辑运算符:或运算

三、数据类型转换

不同类型的数据是不能进行直接运算的,那如果我在终端中输入一个数字,input函数返回的是用字符串表示的数字,比如“12”,它并不能直接进行算术运算,怎么才能转换为整数呢?这就用到数据的类型转换。

实际上,在有些情况下,Python已经悄悄地为我们进行了类型转换,比如:

print(12 + 3.5)  # 返回15.5

我们看到了,12和3.5分别属于整数和浮点数,为什么程序没有出错呢?因为Python认为,整数也可以用浮点数来表示,所以自动帮我们进行了转换。整数和浮点数运算的时候,会自动转换为浮点数,运算结果也是浮点数。那为什么不把浮点数转换为整数再运算呢?那是因为浮点数转换为整数就可能损失精度,你把3.5无论转换为4还是3,与原来的数字都不是相待的,这就会产生或大或小的精度损失,所以还是转换为浮点数保险一些。

对于其它的场景,Python并不知道我们编程者的意图,所以不会帮我们转换。比如我们前面说的用input函数返回值是字符串,如果要把它转换为数字,就要用“显式的”类型转换。这种转换一般由相应的Python函数完成,我们这里先列出常用的四种,其它类型的转换你会在开发过程中逐步遇到:

  • int(x):把括号里面的内容转换成整数;
  • float(x):把括号里面的内容转换成浮点数;
  • str(x):把括号里面的内容转换成字符串;
  • list(x):把括号里面的内容转换成列表。

上面这几个函数要求x必须是能够转换的,比如,你不能把“哈利波特”转换成数字。

我们来举两个实际的例子:

计算正方形的周长和面积:

# 数据类型示例:计算正方形的周长和面积


a = input('请输入正方形的边长:')
a = float(a)    # 这里转换为浮点数float,也可以根据需要转换为整数,使用int()
print('正方形的周长是', a * 4 )
print('正方形的面积是', a ** 2 )

如果你把第二行代码 a = float(a)去掉,会发现程序在执行最后一行的时候出错了,提示 str(就是字符串) 不能进行 ** 运算。

 

 

你可能奇怪为什么输出周长的时候没出错呢?原来,字符串是支持 * (乘法)运算的,接下来的课程我们会讲到,字符串 * 一个数字,会把这个数字重复相应的次数。如果你在终端输入的边长时 5,正常情况下周长是20,如果你不转换数据类型,会发现周长会输出为 5555(把“5”这个字符串重复了4遍)。

当然,强制类型转换不见得一定成功。比如你输入的边长是 abcd,你觉得能强制转换成数字吗?显然不能,所以Python也会给你相应的提示:

 

 

如果你要把input的返回值转换为整数,那可以写成 a = int(a)就可以了。 简单的方法也可以把第一行和第二行写在一起:a = int(input(‘请输入正方形的边长:’))

计算圆的周长和面积

# 数据类型示例:计算圆的周长和面积

PI = 3.1415926

r = input('请输入圆的半径:')
r = float(r)  
print('圆的周长是', round(PI * r * 2,2 ))    # 使用round函数四舍五入,保留两位小数
print('圆的面积是', round(PI * r ** 2,2))   # 使用round函数四舍五入,保留两位小数

这个例子和计算正方形周长面积是相似的,不过我们不想让结果太长,所以使用了python内置的round函数,它和Scratch中的四舍五入一样,可以把结果保留到小数点后指定的位数。比如round(3.1415,2),结果就是3.14,如果写round(3.1415,3),就要返回3.142了。这个函数在处理浮点数时还是很有用的,请大家牢记。

四、课后作业

编写一个计算个人成绩总分和平均分的程序。在终端分别输入姓名、语文成绩、数学成绩、英语成绩,程序计算出三门成绩的总分和平均分,总分和平均分都保留两位小数,在终端中按下面的格式输出:

 

给TA赞助
共{{data.count}}人
人已赞助
综合资讯

从Scratch到Python 04 变量与数据类型

2023-6-2 9:33:47

综合资讯

从Scratch到Python 06 重新认识字符串

2023-6-2 9:36:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索