master
/ 2.6.5 运算优先级.ipynb

2.6.5 运算优先级.ipynb @masterview markup · raw · history · blame

Notebook

运算优先级

Python支持多种运算符的混合运算,所有运算符的优先级(由高到低排列)的描述如下表所示。

序号 运算符 描述
1 ()、[]、{} __括号表达式,元组、列表、字典、集合__
2 x[i],x[m:n] 索引、切片
3 ** __幂运算__
4 +x、 -x、~x 正、负,按位非 NOT
5 *、 / 、//、% __乘法、除法与取模__
6 + 、- __加法与减__
7 << 、>> 移位
8 & 按位与
9 ^ 按位异或
10 | 按位或
11 <、<=、>、>=、!=、== 、is、is not、in、not in __比较运算、成员检测和标识号检测__
12 not x 逻辑非
13 and __逻辑与运算符__
14 or __逻辑或运算符__
15 if…else 条件表达式
16 lambda lambda表达式
17 := __赋值表达式、海象运算符__
In [ ]:
print(4 * 2 ** 3)      # 先幂运算,再计算乘法,输出:32
print(3 + 4 * -2)      # 2先取反、与4相乘,再做加法,输出:-5
print(3 + 4 * 2 / 2)   # 先计算乘除法,除法运算结果为浮点数,输出:7.0
print(3 << 2 + 1)      # 加法优先级高,先2+1,3(11)左移3位变成24 (11000)

括号的优先级最高,可以强制表达式按照需要的顺序求值。可以通过加入小括号“()”的方法来提供弱优先级的优先执行。加了括号,无需比较哪个优先级更高,使程序和表达式更加易于阅读和维护。

In [ ]:
## 实例:判断是否直角三角形
输入三个数a,b,c, 判断能否以它们为三个边长构成直角三角形若能输出YES否则输出NO
In [ ]:
a = float(input())
b = float(input())
c = float(input())

# 三角形判定条件:边都为正数,任意两边之和大于第三边
if a <= 0 or b <= 0 or c <= 0 or (a + b) <= c or (a + c) <= b or (b + c) <= a:
    print('No')
# 直角三角形条件,两边平方和等于第三边
elif a * a + b * b == c * c or a * a + c * c == b * b or c * c + b * b == a * a:
    print('Yes')
else:
    print('No')
In [ ]:
上面的代码中条件都比较长可通过改进算法简化代码如下
In [ ]:
a = float(input())
b = float(input())
c = float(input())

shortest = min(a, b, c)  # 获得最短边长度
longest = max(a, b, c)   # 获得最长边长度
middle = sum([a, b, c]) - shortest - longest

# 若最小边为负值或长边小于等于其他两边之和时,构不成三角形
if shortest <= 0 or shortest + middle <= longest:
    print('NO')
    
# 两边短边长度平方和等于第三边长度平方为直角三角形
elif shortest ** 2 + middle ** 2 == longest ** 2:
    print('YES')
    
else:
    print('NO')
In [ ]: