一木.溪桥 在Logic Education跟Amy学Python
12期:Python基础课
一木.溪桥学Python-03: Python 运算符
日期:2020年12月18日
学习目标:
算术、比较、赋值、逻辑、位、成员、身份、三目运算符。学习内容:
算术运算符
+
-
*
/
% 返余
// 返商整
** 幂次
- tips
/ 计算结果是 浮点数 ,即使两个数都是整数,结果也是浮点数
// 与 % 都是 向下取整 - 如果想同时得到 商 和 余数 ,可以用 divmod() 这个方法。该方法的返回值是 tuple(x//y, x%y)
- 浮点数精度的问题:参考文章
- 使用decimal进行浮点数的精确计算
Python 标准库为我们提供了decimal 这个模块来解决这个问题,decimal 常用于需要精确处理浮点数的场合,比如银行账户金额、货币加减等。
from decimal import Decimal
a = 1.33-1.111
b = Decimal('1.33')-Decimal('1.111')
print(a)
print(b)
run:
0.21900000000000008
0.219
比较运算符
>
<
==
!=
<=
>=
- tips:
- int 不能 直接与 str 比较
- python3 中 不支持 <> 号,如:
- == 与 != 符号 不能分开 写成 = =
- str 与 str 之间比较的是 ASCII,并且 逐个比较
- 连续比较,如:a>b>c 可拆解为 a>b and b>c
赋值运算符
=
+=
-=
*=
/=
%=
//=
**=
- tips:
- 赋值:是将等号右边赋值给等号左边
- python 不支持 a++ 、a-- 语法
- += 等符号 不能分开 写成 + =
逻辑运算符
and
or
not
- and or的短路(懒惰)原则
print(10 and 20)
print(20 and 10)
run:
20
10
位运算符
& 按位与:两者都为1才为1,否则为0
^ 按位或:只有一个为1则为1,否则为0
| 按位异或:两者相等则为0,否则为1
- bin()函数
成员运算符
in 判断某个值是否在指定序列中,在则返回True
not in 判断某个值是否在指定序列中,不在则返回True
- in 与 not in 是 Python 独有的运算符(全部都是小写字母),用于判断对象是否
某个集合的元素之一,非常好用,并且运行速度很快。返回的结果是布尔值类
型的 True 或者 False 。
身份运算符
is 判断两个对象的内存地址是否一致,是则返回True
is not 判断两个对象的内存地址是否不一致,不是则返回True
- 身份运算符也是 Python 的特色语法(全部都是小写字母)
- tips:
- is 与 == 的区别
- is 用于判断两个变量的引用是否为同一个内存地址 ( 可使用 id() 查看 )
- == 用于判断两个变量的值是否相等
三目运算符
- python 中的三目运算符表示方法:
True_statements if expression else False_statements
a = 1
b = 2
print(a+b if a>b else b-a)
run:
1
运算符优先级
作业:
作业答案:
题1:(错解)
name = 'amy'
print( 'amy 在逻辑大家庭' if name == ["bob","tony","Lisa","Steven"]else ' amy 不在 ... 好难过')
run:
amy 不在 ... 好难过
正解:(注意==和in的区别)
name = 'amy'
print( 'amy 在逻辑大家庭' if name in ["bob","tony","Lisa","Steven"]else ' amy 不在 ... 好难过')
run:
amy 不在 ... 好难过
题2:
print('ax' < 'xa' )
run:
True
str 与 str 之间比较的是 ASCII,并且 逐个比较
题3: if 执行了!(理解有误)
- input函数输入的内容都为字符串
- == 用于判断两个变量的值是否相等
- 两个变量的值都为True
temp = input('请输入:')
if temp == 'Yes' or 'yes':
print('if执行了!')
else:
print('else执行了!')
run:
请输入:666
if执行了!
Amy的答案
嘿嘿,我错安逸了哈!
题4:
- is是比较的内存地址
- == 是比较的变量的值
题5:
a = input('a = ')
b = input('b = ')
print(float(a)/float(b) if a and b !=0 else float(a)*float(b))
run:
a = 0
b = 3
0.0
a = 1
b = 5
0.2
a = 1
b = 0
Traceback (most recent call last):
File "F:/Program Files/Pycharm/Projects/Lesson03/作业.py", line 17, in <module>
print(float(a)/float(b) if a and b !=0 else float(a)*float(b))
ZeroDivisionError: float division by zero
a = j
b = k
Traceback (most recent call last):
File "F:/Program Files/Pycharm/Projects/Lesson03/作业.py", line 17, in <module>
print(float(a)/float(b) if a and b !=0 else float(a)*float(b))
ValueError: could not convert string to float: 'j'
Amy我这个代码好多bug啊!!!
答案:
题6:
a = input('a = ')
b = input('b = ')
print('输入较大数为:', a if a>b else b)
run:
a = 3
b = 5
输入较大数为: 5
a = 2
b = 2
输入较大数为: 2
a = j
b = k
输入较大数为: k
Amy老师两数相等时,三目运算符的判断是不是不符合题目的判断逻辑呀!