Python运算符(第三讲)

在这里插入图片描述

python运算符种类

    在python中运算符也分为很多种:

  • 算术运算符
  • 比较运算符
  • 赋值运算符
  • 逻辑运算符
  • 位运算符
  • 成员运算符
  • 身份运算符
  • 三目运算符

一、算术运算符

算术运算符的描述

运算符 描述
+
-
*
/
% 返回除法的余数
** 幂次
// 返回商的整数部分
print(3 + 3)  # 等于6
print(3 - 3)  # 等于0
print(3 * 3)  # 等于9
print(3 / 3)  # 等于1.0;除(/)返回浮点数
print(3 ** 3)  # 等于27;**是次方数;这里是3的3次方
print(10%3) # 等于1;%模,取余数10//3=3,3*3=9,10—9=1
print(10//3) 
# 等于3;//向下取整;10/3=3.3333333333333335,取小于3.3333333333333335且最接近的小数

浮点数问题

为什么10/3=3.3333333333333335呢,这是因为计算是以二进制进行的,然后再转换成十进制展现。由于二进制的有穷性,所以计算结果为3.3333333333333335

>>> 5.4-3
2.4000000000000004

    这里为什么5.3-3不是2.4呢,等于2.4000000000000004并不是python的bug,上面也说过计算是以二进制进行的,然后再转换成十进制展现,所以产生了精准误差。

解决方法

    使用内置模块decimal,我们要使用的是这个模块里的Deciaml这个类

import decimal #导入模块
from decimal import  Decimal #从decimal模块中导入Decimal类

Decimal使用方法:

from decimal import  Decimal #导入decimal模块里的Decimal类
print(Decimal('5.4')-Decimal('3'))

算数运算符的总结

    注意

  • /计算结果是浮点数,即使两个数都是整数,结果也是浮点数
  • //和%都是向下取整
  • 如果想同时得到商和余数可以使用divmod()这个方法。该方法的返回值是tuple(x//y,x%y)
print(divmod(10,3)) # print(divmod(x,y)),输出结果为(3,1),(10//3,10%3)

    浮点数的精度问题如下:

>>> 5.4-3
2.4000000000000004

    该如何解决呢?

>>> from decimal import Decimal
>>> Decimal('5.4')-Decimal('3')
Decimal('2.4')

二.比较运算符

    注意:

  • int不能直接与str比较
  • python3中不支持<>号,例如:>>> 2 <> 3
  • ==与!=不能分开写,不能写成= =或者!=
  • str与str之间比较是以ASCII码,并且逐个比较
  • 连续比较,如3 > 2 > 1,可以拆分为3 > 2 and 2 > 1
运算符 描述
== 比较值是否相等
!= 比较值是否不相等
> 大于
< 小于
>= 大于等于
<= 小于等于
print(True == 1) # True == 比较两个值是否相等;输出bool值
print(True != 1) # False != 比较两个值是否不相等;输出bool值
print(2.0 == 2) # True;比较的是数值
print(3 > 2 > 1) # True;连续比较:3>2 and 2>1;and是要两个都为True才会输出True
print((3 > 2) > 1) # False;加了括号以后就变成了一个整体,3>2为True,那么括号的内容就为1,那么1>1吗,所以输出False

三.赋值运算符

运算符 描述 实例
= 赋值运算符 c = a + b
+= 加法赋值运算符 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

    例如:

a = 1 # 先赋值给a
a += 1 # a += 1就相当于a = a + 1
print(a) # 输出结果为2

四.逻辑运算符

逻辑运算符 表达式 描述
and a and b 逻辑与;a与b都为True则返回True
or a or b 逻辑或;a与b只要有一个为True则返回True
not not a 逻辑非;当a为True时,not a则为False
a = True
b = True
c = False
d = False
print(a and b) # True
print(a and c) # False
print(a or c) # True
# 懒惰机制
print(10 and 20) # 20;10和20bool值都为True,and要两个条件都为True所以会执行到底,所以输出20
print(10 or 20) # 10;or是因为只需要一个条件为True,所以检测到10为True就停止了。

五.位运算符(以二进制)

位运算符 描述
& 按位与:两者都为1,才为1 ,否则为0
| 按位或:只有一个为1则为1, 否则都为0
^ 按位异或:两者相等则为0,否则为1

    例子:当a = 60, b = 13取二进制数

  • a = 0011 1100
  • b = 0000 1101
    a & b = 0000 1100
    a | b = 0011 1101
    a ^ b = 0011 0001

六.成员运算符

    in和not in是python独有的的运算符(全部都为小写字母),用于判断对象是否某个集合的元素之一,非常好用,而且运算速度很快。返回的结果都是bool值类型的True或者False。

成员运算符 描述
in 判断某个值是否在指定序列当中,在则返回True
not in 判断某个值是否在指定序列当中,不在则返回True
name = "Jeff"
class_li=["Jeff", "amy", "lisa"]
#print(name in class_li) 直接输出Jeff在不在class_li中,在就输出True
if name in class_li: # 判断Jeff在不在class_li中,在则输出
    print('在')
else: # 相反则输出不在
    print("不在")

七.身份运算符

    身份运算符也是python的特殊语法(全部小写字母)

身份运算符 描述
is 判断两个对象的内存地址是否一致,是则返回True
is not 判断两个对象的内存地址是否不一致,不是则返回True

    注意: is与==的区别

  • is用于判断两个变量的引用是否为同一内存地址(可用id()查看)
  • ==用于判断两个变量的值是否相等

八.三目运算符

    python中三目运算符的表示方法:
True_statements if expression else False_statements

a = -1
# True_statements if expression else False_statements
# expression为判断条件;符合条件则输出左侧True,否则输出右侧的False
print("大于" if a>0 else "小于")

九.运算符的优先等级

    下表写出了从最高到最低的运算符优先等级。
    优先级别高的运算符先计算或先处理,同级别的按从左往右的顺序计算(赋值运算符除外,它是按右往左的顺序)

运算符 描述
** 指数(最高优先级)
*   /  &  // 乘   除  取余   整除
+  - 加  减
<=   <  >  >= 比较运算符
==  != 比较运算符
=  %=   /=  //=  -=  +=  *=  **= 赋值运算符
is  is not 身份运算符
in  not in 成员运算符
not  or   and 逻辑运算符

十.作业

  1. 作业
        判断 “amy” 是否在[“bob”,“tony”,“Lisa”,“Steven”] 里面如果在则输出’amy 在逻辑大家庭’否则输出’ amy 不在…好难过’
    作业
  2. 作业
        ‘ax’<’xa’ 为True 还是False?为什么?
  3. 作业
        以下程序如果输入666执行个语句?为什么?
temp = input('请输入:')
if temp == 'Yes' or 'yes':
print('if执行了!')
else:
print('else执行了!')
  1. 作业
        is 与==的区别?
  2. 作业
        用户输入a,b。当a 与b 都不为0 时则输出a 与b 做商;否则输出a与b 的乘积。
  3. 作业
        基于题5,使用三目运算符输出a,b 较大的数

作业答案

  1. 第一题
"""判断 "amy" 是否在["bob","tony","Lisa","Steven"] 里面如果在则输出'amy 在逻辑大家庭'否则输出' amy 不在...好难过'"""
name = "amy"
family = ["bob", "tony", "Lisa", "Steven"]
print('amy 在逻辑大家庭' if name in family else ' amy 不在...好难过')
  1. 第二题
"""‘ax’<’xa’ 为True 还是False?为什么?"""
print('ax' < 'xa') # 为True;因为str格式是以ASCII码比较的,'xa' > 'ax'
  1. 第三题
        会执行(‘if执行了!’);因为有两个运算符,==和or,==的优先等级要比or高,所以先运算==。666不等于’yes’所以是False,但是后面的or,只要有一个是True就会输出True,所以输出(‘if执行了!’)
"""以下程序如果输入666执行个语句?为什么?"""
temp = input('请输入:')
if temp == 'Yes' or 'yes':
	print('if执行了!')
else:
	print('else执行了!')
  1. 第四题
        is 与==的区别?
  • is用于判断两个变量的引用是否为同一内存地址(可用id()查看)
  • ==用于判断两个变量的值是否相等
  1. 第五题
"""用户输入a,b。当a 与b 都不为0 时则输出a 与b 做商;否则输出a与b 的乘积。"""
num_1 = float(input('请输入a'))
num_2 = float(input('请输入b'))
if num_1 * num_2 != 0:
    print(num_1/num_2)
else:
    print(num_1*num_2)
  1. 第六题
"""基于题5,使用三目运算符输出a,b 较大的数"""
# 方法一
num_1 = float(input('请输入a'))
num_2 = float(input('请输入b'))
print(num_1 if num_1 > num_2 else num_2)
# 方法二
num_1 = float(input('请输入a'))
num_2 = float(input('请输入b'))
print(max(num_1,num_2))

猜你喜欢

转载自blog.csdn.net/weixin_51158247/article/details/112440389