python基础第八节

7.1 逻辑运算符

运算符 描述
and 与运算, 假设x,y为两个表达式,x and y表示当x,y两个表达式都为真时,运算的结果为真,and通俗的理解成并且
or 或运算,假设x,y为两个表达式,x or y表示当x,y两个表达式只要一个为真,运算的结果就为真,当两个都为假时,则运算结果为假。or通俗的理解成或者
not 非运算, 假设x为表达式,当x为真时,运算的结果就为假,当x为假时,运算结果为真。not通俗理解为取反
优先级

not > and > or

短路求值 & 通路求值

  • and从左到右, 全真, 则返回最后一个真值; 有假, 则返回第一个假值.
  • 当or 从左到右, 全假, 则返回最后一个假值; 有真, 则返回第一个真值.

a = True
b = False
print(a and b)
print(a or b)
print(not (a and b))

a = 3
b = 4
c = 5

print(a > b and b < c)
print(a > b or b < c)
print(not (a > b))
print(not (a > b) and b > c)

# 短路求值 & 通路求值
a = 20 
b = 30
print(a and b)
print(b and a)
print(a or b)


# 优先级

not 3 > 2 and 3 < 4 or 4 > 5 and 9 < 8
# ↓
not True and True or False and False
# ↓ not最高优先级
False and True or False and False
# ↓ and第二优先级
False or False
# ↓ or 最低优先级
False

# 练习

print(3 > 1 and 2 or 2 < 3 and 3 and 4 or 3 > 2)
print(True and 2 or True and 3 and 4 or True)
print(True and 2 or True and 3 and 4 or True)
print(2 or 4 or True)
print(2)

False
True
True
False
True
True
False
30
20
20
2
2
2
2
2

7.2 成员运算符

运算符 描述
in 当在指定的序列中找到对应的值时返回True, 否则返回False
not in 当在指定的序列中没有找到对应的值时返回True, 否则返回False
hello_string = 'Hello Python'

# 判断字符串中是否存在Hello,如果存在则返回True,否则False
print('Hello' in hello_string)
# 判断python是不是不在字符串hello_string中
print('python' not in hello_string)

# 列表也是如此
fruits = ['apple', 'orange', 'banana']
print('purple' in fruits)
print('app' in fruits)
print('apple' not in fruits)

True
True
False
False
False

7.3 Python中的优先级

  1. 括号运算符()
  2. 幂运算符**
  3. 一元运算符+, -正负
  4. 乘法*, 除法/, 取模%, 整除//具有相同的优先级, 它们按从左到右的顺序进行计算
  5. 加法+, 减法-, 有相同的优先级, 按从左到右的顺序进行计算
  6. 比较运算符 >, >= , <, <= ,==, !=, 具有相同的优先级, 按从左到右的顺序进行计算
  7. 逻辑运算符 not > and > or
  8. 赋值运算符(=, +=, -=, *=, /=, %=, //=, **=)有相同的优先级, 按从左到右的顺序进行计算。

7.5 作业

  1. 编写一个程序, 输入一个年份, 判断它是否为闰年, 要求使用逻辑运算符。
    • 普通闰年: 公历年份是4的倍数的, 一般是闰年。(如2004年就是闰年);
    • 世纪闰年: 公历年份是整百数的, 必须是400的倍数才是闰年(如1900年不是世纪闰年, 2000年是世纪闰年)。
year = int(input("请输入年份"))
rynm_bool = year%4 == 0 and year%100 != 0 or year % 400 ==0
print()
print('是否闰年: ', "是" if rynm_bool else "否"  )
  1. 编写一个程序, 输入一个三位数的正整数, 判断它的百位、十位、个位是否是连续的。
    • 要求使用逻辑运算符.(连续即: 123, 234, 345, 321类似这种的)
num =  int(input("请输入数字"))

a = num//100 # 百位
b = num%100//10 # 十位
c = num%10 # 个位

# # 另一个获得各个位置数字的方法
# a = str(num)[0]
# b = str(num)[1]
# c = str(num)[2]

# 两种判断方法
lmxu_bool1 = a + c == b*2
lmxu_bool2 = a + 2 == b + 1 == c or a == b + 1 == c + 2

print('是否连续: ', "是" if lmxu_bool1 else "否"  )

是否闰年: 是
是否连续: 是

Relative Article

变量、字面量的比较和判断