第四章 运算符

1. 【两个对象相加】+

锦囊01 数字相加

在Python中,经常会遇到使用“+”进行数值相加的情况,常用应用如下:

a = 10
b = 1
c = 2.0
d = 3.0

print(a+b)   		# 整数相加
print(c+d)   		# 浮点数相加
print(a+b)   		# 整数和浮点数相加
print(a+ .5) 		# 整数和省略零的浮点数相加

锦囊02 字符串相加

在Python中,如果”+”号的两侧是字符串类型数据,则表示将2个字符串进行拼接。常用应用如下:

s1 = 'mingri'
s2 = 'soft'

print(s1+s2)      		# 字符串拼接
print(s1+' '+s2)  		# 2个字符串间添加空格
print(s1+'\n'+s2) 		# 2个字符串间添加换行符

锦囊03 元组相加

当元组使用“+”相加时,返回合并后的元组。常用应用如下:

t1 = (1,2,3)
t2 = (4,5,6)
t3 = ('a','b','c')
t4 = ('d','e','f')
t5 = (('o','p','q'),('x','y','z'))

print(t1+t2)
print(t1+t2+t3+t4)
print(t1+t2+t3+t4+t5)

锦囊04 列表相加

当列表中使用“+”相加时,返回合并后的列表。常用应用如下:

l1 = [1,2,3]
l2 = [4,5,6]
l3 = [['a','b','c']]
l4 = [['d','e','f']]
l5 = [['o','p','q'],('x','y','z')]

print(l1+l2)
print(l3+l4)
print(l1+l2+l3+l4+l5)

说明:字典和集合不能使用“+”进行操作。

2. 【得到负数或是一个数减去另一个数】-

锦囊01 作为负号使用

作为负号使用时,注意负负为正。常用应用如下:

num1 = 1
num2 = -2
num3 = -3.0

print(-num1)
print(num2)
print(-num3)

锦囊02 作为减号使用

作为减号使用时,常用应用如下:

num1 = 5
num2 = 1
num3 = 10
num4 = 8.0

print(num1-num2)
print(num1-num3)
print(num1-num4)

3. 【两个数相乘或是返回一个被重复若干次的字符串】*

锦囊01 作为乘号使用

作为乘号使用时,常用应用如下:

num1 = 3
num2 = 4
num3 = 5.5
num4 = -6

print(num1 * num2)
print(num1 * num3)
print(num1 * num4)

锦囊02 对字符串使用*号

使用“*”作为重复符号,打印一个等腰三角形。代码如下:

print(' '*2+'△'+' '*2)
print(' '+'△'*3+' ')
print('△'*5)

锦囊03 对元组使用*号

“*”号作为重复符号,同样可以作用在元组上。

l1 = (1,2,3)
l2 = (('a','b','c'),('d','e','f'))

print(l1 * 3)
print(l2 * 3)

锦囊04 对列表使用*号

“*”号作为重复符号,同样可以作用在列表上。

l1 = [1,2,3]
l2 = [['a','b','c']]
board = [['-'] * 3 for i in range(3)] # 使用列表解析式

print(l1 * 3)
print(l2 * 3)
print(board)

4. 【两个数相除】/

锦囊01 实现人民币和美元的转换

已知1美元兑换人民币6.78元,编写程序实现人民币转换成美元的功能。代码如下:

exchange_rate = 6.78 						# 汇率
RMB = input('请输入人民币金额:')

try:
    US = float(RMB) / exchange_rate
    print('转化后的美元是:{:.2f}'.format(US))
except ValueError:
    print('请输入正确的数值类型。')

5. 【返回商的整数部分(向下取整)】//

锦囊01 将描述“秒”转化为“分 秒”的格式

在考试系统中需要记录用户的答题时间。通常答题时间是以秒为单位记录的。比如用时“100”秒,为了增加可读性,需要将“100秒”转化为“1分钟40秒“的形式。如下代码,可以实现该功能:

def second_format(seconds):
    minutes = seconds // 60 # 计算分钟数
    if minutes > 0:
        seconds = seconds - minutes * 60 # 计算剩余秒数
    return minutes,seconds

seconds = input('请输入秒数:')
result = second_format(int(seconds))
print(f'{seconds}秒可以转化为{result[0]}{result[1]}秒')

6. 【返回除法的余数】%

锦囊01 负数使用%求余数

计算下面的除法求余结果:

result1 = 8 % 3
result2 =-8 % 3
result3 = 8 % -3

print(f"8  % 3 的结果是:{result1}")
print(f"-8 % 3 的结果是:{result2}")
print(f"8 % -3 的结果是:{result3}")

上面的结果可能与很多人的预期不符,这个结果是由Python机制决定的。在Python中取余数遵循下面的公式:

r=a-n*[a//n]

对于 8%3 ,其中a=8,n=3。r=8-3*(8//3),所以结果为2;对于 -8%3,r = -8 - 3*(-8//3),结果为1;对于8 % -3,r= 8 - (-3)*(8//-3),结果为-1。

注意:-8//3 计算时向下取整,结果为-3,而不是-2。

锦囊02 将描述“秒”转化为“时 分 秒”的格式

在考试系统中需要记录用户的答题时间。通常答题时间是以秒为单位记录的。比如用时“3800”秒,为了增加可读性,需要将“100秒”转化为“1分钟40秒“的形式。如下代码,可以实现该功能:

def second_format(seconds):
    minutes = seconds // 60 				# 计算分钟数
    seconds = seconds % 60
    hours = minutes // 60
    minutes = minutes % 60
    return hours,minutes,seconds

seconds = input('请输入秒数:')
result = second_format(int(seconds))
print(f'{seconds}秒可以转化为{result[0]}小时{result[1]}{result[2]}秒')

7. 【返回一个数的幂】**

锦囊01 用2种方式求x的y次幂

用2种方式求x的y次幂,代码如下:

# 计算x的y次幂
x = 10
y = 3

# 方式1
print(x ** y)

# 方式2
import math  				# 导入math模块
print(math.pow(x,y)) 		# 返回类型为浮点型

8. 【简单的赋值】=

锦囊01 不同类型数据的赋值

不同类型数据的赋值,代码如下:

# 常用数据类型赋值
num = 123
str_val = "mrsoft"
tuple_val = (1,2,3)
list_val = [1,2,3]
dict_val = {"name":"andy","age":18}
set_val = {1,2,3}

def fun():
    print("函数赋值")

f = fun 			# 函数赋值
f() 				# 调用函数

class Student:
    def __init__(self):
        print("类赋值")

s = Student 		# 类赋值
s() 				# 类的实例化

9. 【加法赋值】+=

锦囊01 计算字典中各值的累加和

不同类型数据的赋值,代码如下:

basket = {"fruit":45.80,"meat":20.45,"juice":10} # 购物车数据
total = 0 # 初始化总价

# 方式1:
for item in basket.values():
    total += item
print(f'方式1的计算结果为{total}')

# 方式2:
total = sum(basket.values())
print(f'方式2的计算结果为{total}')

10. 【减法赋值】-=

锦囊01 “逢7过”游戏

“逢7过”是一个锻炼头脑敏捷性的益智游戏。游戏规则是大家围成一圈,然后从1开始依序喊数字,如果数字是7或者7的倍数,就不能喊出这个数字,必须做一个动作。使用Python 计算出200以内的7的倍数。例如7、14、28等。代码如下:

value = 200              	# 初始值
l = []

while value > 0 :
    if value % 7 == 0 :  	# 如果被7整除
        l.append(value)  	# 添加到列表
    value -= 1

l.reverse() 				# 列表反转
print(l)    				# 输出列表

11. 【乘法赋值】*=

锦囊01 多种类型使用乘法赋值

对不同类型数据使用乘法赋值运算,代码如下:

# 数字
num = 5
num *= 3
print(num)

# 字符串
str_val = "mrsoft"
str_val *= 3
print(str_val)

# 元组
tuple_val = (1,2,3)
tuple_val *= 3
print(tuple_val)

# 列表
list_val = [1,2,3]
list_val *= 3
print(list_val)

12. 【除法赋值运算符】/=

锦囊01 用2种方式对列表中的元素批量相除

对于列表list_value=[1,2,3,4,5],使用2种方式将list_value中的每个元素除以2。代码如下:

list_value = [1,2,3,4,5]

# 方式1:
new_value = [i/2 for i in list_value] 		# 使用列表解析式
print(new_value)

# 方式2:
new_value = []
for i in list_value:
    i /= 2                					# 除法赋值运算
    new_value.append(i)   					# 追加到新列表
print(new_value)

13. 【取模赋值运算符】%=

锦囊01 用2种方式对列表中的元素批量取模

判断一个列表中的每一个元素的奇偶性。例如list_value=[10,11,12,13,14,15],输出结果应该为new_value=[‘偶数’, ‘奇数’, ‘偶数’, ‘奇数’, ‘偶数’, ‘奇数’],代码如下:

list_value = [10,11,12,13,14,15]
new_value = []

for i in list_value:
    i %= 2                         			# 取模运算
    val = '奇数' if i else '偶数'        	# 三元表达式
    new_value.append(val)          			# 追加到新列表

print(new_value)

14. 【幂赋值运算符】**=

锦囊01 用2种方式对列表中的元素批量求平方

对于列表list_value=[1,2,3,4,5],使用2种方式将list_value中的每个元素求平方。代码如下:

list_value = [1,2,3,4,5]

# 方式1:
new_value = [i**2 for i in list_value] 		# 使用列表解析式
print(new_value)

# 方式2
new_value = []
for i in list_value:
    i **= 2                       			# 幂赋值操作
    new_value.append(i)          			# 追加到新列表

print(new_value)

15. 【取整除赋值运算符】//=

锦囊01 用2种方式对列表中的元素批量取整数赋值

对于列表list_value=[1,2,3,4,5],使用2种方式将list_value中的每个元素除以2取整。代码如下:

list_value = [1,2,3,4,5]

# 方式1:
new_value = [i//2 for i in list_value] # 使用列表解析式
print(new_value)

 

# 方式2
new_value = []
for i in list_value:
    i //= 2                     
    new_value.append(i)          # 追加到新列表
print(new_value)

16. 【等于运算符】==

锦囊01 == 运算符与is 的区别

“==”运算符用于比较对象的值是否相等,如果值相等即返回True,而is既要判断值是否相等,又要内存地址相等。它们之间的区别可以通过如下代码来验证:

num1 = 1000
num2 = 1000

print(num1 == num2)
print(num1 is num2)

str1 = 'mingrisoft'
str2 = 'mingrisoft'

print(num1 == num2)
print(num1 is num2)

说明:上面的代码,需要在Python命令提示符下,一行一行输入运行,才是上面的结果。在Pycharm或IDLE中,将上面的代码保存为文件运行,结果输出全部为True。这是因为Pycharm中把整数存储为常量,因此在同一上下文中对同一整数的赋值将产生完全相同的结果。

17. 【不等于运算符】!=

锦囊01 遍历列表输出不等于某值的信息

获取公司列表中,英文名不是”mrsoft”的所有公司的中文名。代码如下:

list_val = [['mrsoft','明日科技有限公司'],
            ['baidu','百度在线网络技术有限公司'],
            ['tencent','深圳市腾讯计算机系统有限公司'],
            ['alibaba','阿里巴巴网络技术有限公司']]

list_new = []
for (name, val) in list_val:   		# 遍历列表
    if name != "mrsoft":       		# 判断不等于
        list_new.append(val)   		# 添加到新列表
print(list_new)

18. 【大于运算符】>

锦囊01 比较相同类型数据的大小

比较数字、字符串、元组、列表和集合类型数据的大小。代码如下:

print(2 > 1)             		# True
print(2.3 > 1.4)         		# True
print('b' > 'a')         		# True
print('abc' > 'abb')     		# True
print((1,2,3) > (1,2,2)) 		# True
print([1,2,3] > [1,2,2]) 		# True
print({1,2,3} > {1,2,2}) 		# True

说明:比较大小时,先比较第一个元素,ASCII码值大的元素比较大。如果第一个元素相同,则比较第二个元素,以此类推。

19. 【小于运算符】<

锦囊01 将倒序索引转化为正序索引

在对序列进行切片操作时,即可以正序切片,也可以倒序切片。编写一个函数,用于计算倒序的索引在正序的位置。代码如下:

def fixIndex(object, index):
    if index < 0:
        # 如果index在右侧,则将其转化为左侧
        index += len(object) + 1
    return index

list_val = [1,2,3,4,5]
index1 = fixIndex(list_val,-1)
index2 = fixIndex(list_val,-2)
index3 = fixIndex(list_val,-3)
index4 = fixIndex(list_val,-4)
index5 = fixIndex(list_val,-5)

print(f'倒数第1个是正数第{index1}个')
print(f'倒数第2个是正数第{index2}个')
print(f'倒数第3个是正数第{index3}个')
print(f'倒数第4个是正数第{index4}个')
print(f'倒数第5个是正数第{index5}个')

锦囊02 获取列表中最小的元素

在一个全是数字的列表中,获取值最下的元素。代码如下:

numbers = [3,6,2,8,4,10]
min = numbers[0]
for number in numbers:
    if number < min:
        min = number
print(f'列表中最小的元素是{min}')

20. 【大于等于运算符】>=

锦囊01 判断考试成绩是否及格

语文考试及格成绩为60分,如果成绩大于或者等于60分,则成绩及格,否则成绩不及格。实现该功能的代码如下:

score = float(input('请输入你的分数:'))
if score >= 60:
    print('恭喜你,考试通过!')
else:
    print('很遗憾,没有通过考试')

21. 【小于等于运算符】<=

锦囊01 用2种方式获取偶数

使用2种方式获取20以内的偶数。代码如下:

# 方式1:使用列表解析式
list_val = [i for i in range(21) if i % 2 == 0]
print(list_val)

# 方式2:使用循环遍历
list_val = []
num = 0
while num <= 20:
    if num % 2 == 0:          		# 判断能否被2整除
        list_val.append(num)  		# 将偶数追加到列表
    num += 1                  		# 变量自增
print(list_val)

22. 【与运算符】and

锦囊01 判断电梯是否超载

电梯设置规定:如果承载人不超过10人,且总重量不超过1000千克,可以正常使用,否则提示超载。实现上述功能的代码如下:

num = int(input('请输入人数:'))
weight = float(input('请输入总重量:'))

if num <= 10 and weight <= 1000:
    print('电梯正常运行')
else:
    print('电梯超载')

23. 【或运算符】or

锦囊01 使用or运算符判断某个区间之外的数据

使用“or”运算符代替“>=”运算符,判断是否为需要重点关注的产品。代码如下:

num = float(input('请输入产品销量:'))

if num > 500 or num < 20:
    print('该产品需要重点关注!')
else:
    print('该产品销量平稳!')

24. 【非运算符】not

锦囊01 判断输入的值是否为整数

判断用户输入的值是否为整数,代码如下:

str_val = input('请输入整数:')
if not str_val.isdigit():
    print('格式错误')
else:
    print(f'你输入的整数是{str_val}')

25. 【按位与运算符】&

锦囊01 输出按位与的结果

输出下面二进制按位与的结果,代码如下:

a = 0b00111100
b = 0b00001101
print(a & b)

26. 【按位或运算符】|

锦囊01 输出按位或的结果

输出下面二进制按位或的结果,代码如下:

a = 0b00111100
b = 0b00001101
print(a | b)

27. 【按位异或运算符】^

锦囊01 输出按位异或的结果

输出下面二进制按位异或的结果,代码如下:

a = 0b00111100
b = 0b00001101
print(a ^ b)

28. 【按位取反运算符】~

锦囊01 输出按位取反的结果

输出下面二进制按位取反的结果,代码如下:

a = 0b00111100
print(~a)

29. 【左移动运算符】<<

锦囊01 输出左移动运算的结果

输出下面二进制向左移动的结果,代码如下:

a = 0b00111100
print(f'a的值是{a}')
print(f'a移动2位的结果是{a << 2}')
print(f'a移动3位的结果是{a << 3}')

30. 【右移动运算符】>>

锦囊01 输出左移动运算的结果

输出下面二进制向右移动的结果,代码如下:

a = 0b00111100
print(f'a的值是{a}')
print(f'a移动2位的结果是{a >> 2}')
print(f'a移动3位的结果是{a >> 3}')

31. 【在指定的序列中查找】in

锦囊01 判断字符是否在字符串中

使用“in”操作符判断某个字符是否在字符串中,代码如下:

str_val = 'mrsoft'
print('m'  in 'mrsoft')
print('mr' in 'mrsoft')
print('mt' in 'mrsoft')

锦囊02 判断元素是否在元组中

使用“in”操作符判断某4E2A元素是否在元组中,代码如下:

tuple_val = (1,(2,3),4,5)

print(1 in tuple_val)
print((4,5) in tuple_val)
print((2,3) in tuple_val)

锦囊03 判断元素是否在列表中

使用“in”操作符判断某个元素是否在列表中,代码如下:

list_val = [1,(2,3),4,5]
print(2 in list_val)
print([4,5] in list_val)
print((2,3) in list_val)

锦囊04 判断元素是否在字典中

使用“in”操作符判断某个元素是否在字典中,代码如下:

dict_val = {'name':'andy','age':18}
print('name' in dict_val)
print('age' in dict_val)
print('andy' in dict_val)

锦囊05 判断元素是否在集合中

使用“in”操作符判断某个元素是否在集合中,代码如下:

set_val = {1,2,3,'mrsoft',(1,2,3)}
print(1 in set_val)
print((1,2) in set_val)
print('mrsoft' in set_val)
print((1,2,3) in set_val)

32. 【在指定的序列中查找】not in

锦囊01 判断字符串信息是否合法

在注册网站时,需要用户填写“真实姓名”、“手机号”和“密码”3个字段。使用“not in”操作符,完成判断用户填写的注册信息是否正确,代码如下:

res = []

# 判断是否填写完全
if 'truename' not in res or 'phone' not in res or 'password' not in res:
    print('必须填写真实姓名、手机号和密码')

锦囊02 删除列表中的重复元素

使用not in删除列表中的重复元素。代码如下:

numbers = [2,2,4,6,3,4,6,1]
uniques = []

for number in numbers:
    if number not in uniques:
        uniques.append(number)

print(uniques)

33. 【判断两个标识是否引自同一个对象】is

锦囊01 判断空字符串、空元组和空列表是否为None

判断空字符串、空元组和空列表是否为None,代码如下:

def test_none(val):
    if val is None:
        print(f'{val} is None')
    else:
        print(f'{val} is not None')

test_none('')
test_none(())
test_none([])

34. 【判断两个标识是否引自同一个对象】is not

锦囊01 判断是否开启调试模式

判断空字符串、空元组和空列表是否为None,代码如下:

class Test():
    def run(self,debug=None):
        if debug is not None:
            self.debug = bool(debug)

test = Test()
test.run(debug=True)

if test.debug:
    print('调试模式已开启')
else:
    print('调试模式已关闭')

锦囊02 使用is not 避免隐式判断错误

在if表达式中,if is和if not会把后面的对象自动隐式转化为布尔型数据。在某些情况下会导致难以发现的错误。例如下面的代码:

def pay(name,salary=None):
    if not salary:
        salary = 8
    print(f'{name}的钟点工工薪水是{salary}元')

pay("Andy",0)

如果调用pay(“Andy”,0)会打印什么呢?

Andy的钟点工工薪水是8

这是为什么?因为函数接受salary参数时,为其赋值0。此时,if not salary为True,所以继续执行if语句。下面使用is not对函数进行修改,避免隐式转换导致的错误。代码如下:

def pay(name,salary=None):
    if salary is None:
        salary = 8

    print(f'{name}的钟点工工薪水是{salary}元')
pay("Andy",0)

运行结果如下:

Andy的钟点工工薪水是0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值