Python基础(三)

1、运算符

运算符用于执行某种操作并返回一个结果,Python中的运算符可以分为:

1.1 算术运算符

用于执行基本的数学运算

1.1.1 常见运算符

  • +:加法

  • -:减法

  • *:乘法

  • /:除法

  • %:取模(取余数)

  • **:幂运算

  • //:整除(取整数部分)

1.1.2 练习

# 超市的西瓜 13 元一个, 问 你拿100 元可以买几个西瓜,剩余 几元  
print('可以买', 100 // 13 , '个西瓜,剩余', 100 % 13, '元')

# 现在是 18:02:31 秒 请问现在距离 凌晨 0:0:0 过了多少秒?
second = 18 * 60 * 60 + 2 * 60 + 31
print('距离凌晨 0:0:0 过了', second, '秒')

# 已知从凌晨 0:0:0 到现在已经过了 63320 秒, 请问现在是 几时几分几秒?
s = 63320
hour = s // 60 // 60
minute = s % 3600 // 60
second = s % 60
print('现在是:', hour, ':', minute, ':', second)

1.2 比较运算符

用于比较两个值并返回布尔值 True 或 False

  • = =:等于

  • ! =:不等于

  • <:小于

  • >:大于

  • < =:小于等于

  • > =:大于等于

1.3 逻辑运算符

用于连接布尔值并返回布尔值

  • and:与(逻辑与)

  • or:或(逻辑或)

  • not:非(逻辑非)

1.3.1 运算规则

  • and 与运算:两者同时为真,结果才为真

x and y   
# x, y代表表达式

3 + 4 > 5 and 6 + 7 > 100
# False

真值表(有假则假,无假则真)

x的值 y的值 x and y的值
True True True
True False False
False True False
False False False

优先返回假值对象, 如果x 为假值,返回x, 否则返回y

  • or 或运算:只要有一个为真,结果就为真

x or y 
# x, y代表表达式

3 + 4 > 5 or 6 + 7 > 100
# True

真值表(有真则真,无真则假)

x的值 y的值 x or y的值
True True True
True False True
False True True
False False False
  • not 非运算:将表达式的结果取 操作

not 运算符是一元运算符

# not 表达式

not True    # False
not False   # True
not 3.14    # False
not ''      # True
not 1 + 2   # False

# 写一个程序,输入一个整数, 判断这个整数是奇数还是偶数

x % 2 == 1   # 结果为True,x 一定是奇数
x % 2 == 1   # 结果为False,x 一定是偶数

1.4 赋值运算符

用于给变量赋值

  • =:赋值

  • +=:加法赋值

  • -=:减法赋值

  • *=:乘法赋值

  • /=:除法赋值

  • %=:取模赋值

  • **=:幂运算赋值

  • //=:整除赋值

    注意:

    没有 a++、 a-- 这种自增自减运算符;

1.5 位运算符

用于对整数按位进行操作

2.5.1 常见运算符

  • &:按位与

  • |:按位或

  • ^:按位异或

  • ~:按位取反

  • <<:左移位

  • >>:右移位

2.5.2 运算规则

  1. 按位与(&)

    • 表达式:a & b

    • 功能:对于每一位,如果a和b的相应位都是1,则结果位为1,否则为0。

      # 示例:计算两个二进制数的按位与
      a = 0b1011  # 二进制表示的11
      b = 0b1101  # 二进制表示的13
      result_and = a & b  # 计算两者之间的按位与
      print(bin(result_and))  # 输出:0b1001 (十进制为9)
  2. 按位或(|)

    • 表达式:a | b

    • 功能:对于每一位,只要a和b中至少有一位是1,则结果位为1,否则为0。

      # 示例:计算两个二进制数的按位或
      a = 0b1011
      b = 0b1101
      result_or = a | b  # 计算两者之间的按位或
      print(bin(result_or))  # 输出:0b1111 (十进制为15)
  3. 按位异或(^)

    • 表达式:a ^ b

    • 功能:对于每一位,如果a和b的相应位不同(一个为1,另一个为0),则结果位为1,否则为0。

      # 示例:计算两个二进制数的按位异或
      a = 0b1011
      b = 0b1101
      result_xor = a ^ b  # 计算两者之间的按位异或
      print(bin(result_xor))  # 输出:0b110 (十进制为6)
  4. 按位取反(~)

    • 表达式:~a

    • 功能:对操作数a的每一个二进制位进行取反,即将1变为0,0变为1。

      # 示例:计算一个二进制数的按位取反
      a = 0b1011
      result_not = ~a  # 计算a的按位取反
      print(bin(result_not))  # 输出:-0b1100
  5. 左移运算符(<<)

    • 表达式:a << b

    • 功能:将a的二进制表示向左移动b位,左边移出的部分会被丢弃,右边空出的位置补零。相当于乘以$2^n$次方

    # 示例:将一个二进制数向左移动两位
    a = 0b1011
    result_left_shift = a << 2  # 将a向左移动两位
    print(bin(result_left_shift))  # 输出:0b101100 (十进制为44)
  6. 右移运算符(>>)

    • 表达式:a >> b

    • 功能:

      • 将a的二进制表示向右移动b位

      • 对于无符号整数,右边移出的部分会被丢弃,左边空出的位置补零(通常补0);

      • 对于有符号整数,右移时取决于具体实现,可能是算术右移(符号位扩展)或者逻辑右移(补0)。

      • 同理,相当于除以2^n

# 示例:将一个有符号二进制数向右移动一位
a = -0b1000  # 十进制为-8
result_right_shift = a >> 1  # 将a向右移动一位
print(bin(result_right_shift))  # 输出:-0b100 (十进制为-4)

# 对于无符号数的例子
unsigned_a = 0b1000
unsigned_result_right_shift = unsigned_a >> 1
print(bin(unsigned_result_right_shift))  # 输出:0b100 (十进制为4)

1.6 身份运算符

用于比较对象的内存地址(即身份)

  • is:判断对象是否相同

  • is not:判断对象是否不同

基础类型:值和类型都相同时,存在一个内存空间里面

a = 1
b = 1
print(a == b)  #True, 比较的是值
print(a is b)  #True, 比较的是内存地址,同一个值放在一个内存里面

 基础类型:类型不同时就需要存放在两个内存空间里

a=1
b=1.0
a == b #True,值是相等的
a is b #False,需要放在两个内存空间里面,分别表示int和float

引用类型:有序列表

a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) #True, 比较的是值
print(a is b) #False,比较的是内存地址

更多1:有序的列表list

a = [1, 2, 3]
b = [1, 3, 2]
print(a == b) #False,比较的是值,列表是有序的,值不同
print(a is b) #False,比较的是地址

 更多2:无序的集合Set

a = {1, 2, 3}
b = {1, 3, 2}
print(a == b) #True,比较的是值,Set是无序的,所以值相同
print(a is b) #False,比较的是地址

更多3:无序的字典Dict

a = {'name': '张三', 'age': 10}
b = {'age': 10, 'name': '张三'}
print(a == b) #True,比较的是值,字典是无序的,所以值相同
print(a is b) #False,比较的是地址

1.7 成员运算符

用于检查一个值是否是某个集合的成员

  • in:判断值是否存在于序列中

  • not in:判断值是否不存在于序列中

5 in  [2, 34, 5, 67]
# True

 1.8 三目运算符

条件运算符、三元运算符

max = a if a>b else b
#如果 a>b 成立,就把 a 作为整个表达式的值,并赋给变量 max;
#如果 a> b 不成立,就把 b 作为整个表达式的值,并赋给变量 max。

b = 3 + 1, "3 > 2",print('AAA') if 1 > 2 else print("BBB"),2 + 2
print (b)

# BBB
# (4, '3 > 2', None, 4)

2、优先级总结(从高到低)

  1. 括号 ()

  2. 算术运算符:** > * / // % > + -

  3. 比较运算符:== != > < >= <=

  4. 成员运算符:in not in

  5. 身份运算符:is is not

  6. 逻辑运算符:not > and > or

  7. 位运算符:~ & | ^ << >>

  8. 赋值运算符:= += -= *= /=

  9. 三目运算符:x if condition else y

我们借助()来明确优先级问题。

x = 10
y = 20
result = (x + 5) * y if x > 5 else x - y

"""
    括号内的 x + 5 先计算,结果为 15。
    然后计算 x > 5,结果为 True。
    最后计算 15 * y,结果为 300。
"""

你可能感兴趣的:(python,开发语言)