Python除法使用注意

本文探讨了Python 3.x中除法运算的细节,通过一个《Python Cookbook》中的例子,指出在进行整数除法时可能出现的小数点后数据截断现象。在遇到类似问题时,文章提到了Stack Overflow上的解决方案,包括两种强制转换为浮点数的方法,以确保得到预期的浮点结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:加上另外一篇文章 Python dictionary items()系列函数的使用,来自Python Cookbook同一节仅有的两个例子,发现了两个不同的盲点,看来书里面的代码不自己手动输入一遍,真的不行

===================== 正文分割线 =====================

源自《Python Cookbook》第3版7.1节第一个例子

def avg(first, *rest):
    return (first + sum(rest)) / (1 + len(rest))

# Sample use
avg(1, 2)       # 1.5
avg(1, 2, 3, 4) # 2.5

源程序只是为了演示变长参数的使用,不过 Python 2.7.1 的解释器里,我得到的结果却和注释的结果不一样

>>> def avg(first, *rest):
...     return (first + sum(rest)) / (1 + len(rest))
... 
>>> avg(1, 2)
1
>>> avg(1, 2, 3, 4)
2

可以很明显的看到,小数点后的数据被截断了,我记得两个整数相除,"//" 应该才是取整,难道我记错了?

>>> def avg(first, *rest):
...     return (first + sum(rest)) // (1 + len(rest))  # change '/' to '//'
... 
>>> avg(1, 2)
1
>>> avg(1, 2, 3, 4)
2
将 “/” 改成了“//”,得到的结果是一样的,“//”的确是取整这一点我是没记错,不过为什么“/”的结果也是截断了的?


同样的程序我在 3.4.1 的解释器里面做了测试,得到了预想的结果:

>>> def avg(first, *rest):
...     return (first + sum(rest)) / (1 + len(rest))
... 
>>> avg(1, 2)
1.5
>>> avg(1, 2, 3, 4)
2.5
>>> def avg(first, *rest):
...     return (first + sum(rest)) // (1 + len(rest))  # change '/' to '//'
... 
>>> avg(1, 2)
1
>>> avg(1, 2, 3, 4)
2
可以看到在 3.4.1 的解释器里,“/”的结果保留了小数位,而“//”则是取整后的结果


搜索之后,找到了stackoverflow上的这个问题:Python里如何强制除法的结果为浮点数? 注意这个是针对 2.x 的版本,3.x 里面并不存在这样的问题

答案的前两个解决方案,都很不错:

方法1:

>>> from __future__ import division
>>> a = 4
>>> b = 6
>>> c = a / b
>>> c
0.66666666666666663

方法2:

类似于C语言里面的做法:

c = a / float(b)

课程概述教会学员快速学会python数据分析,覆盖python基础,pandas,seaborn,matplotlib,SQL,sqlite,lambda等知识。课程是数据科学家居家必备的军火库。课程定期更新,大部分视频分辨率支持2K超清,学员可以看清每一行代码。 适合人群python数据科学从业人员,数据分析师,统计 学习计划和方法1.每天保证1-2个小时学习时间,预计7-15天左右可以学习完整门课程(不同基础学生时间差异较大)。2.每节课的代码实操要保证,建议不要直接复制粘贴代码,自己实操一遍代码对大脑记忆很重要,有利于巩固知识。3.第二次学习时要总结上一节课内容,必要时做好笔记,加深大脑理解。4.不懂问题要罗列出来,先自己上网查询,查不到的可以咨询老师。 作者介绍Toby,持牌照金融公司担任模型验证专家,国内最大医药数据中心数据挖掘部门负责人!和清华大学出版社,重庆儿科医院,中科院教授,赛柏蓝保持慢病数据挖掘项目合作!管理过欧美日中印巴西等国外药典数据库,马丁代尔数据库,FDA溶解度数据库,临床试验数据库,WHO药物预警等数据库。原创公众号(python风控模型) 课程概述教会学员快速学会python数据分析,覆盖python基础,pandas,seaborn,matplotlib,SQL,sqlite,lambda等知识。课程是数据科学家居家必备的军火库。课程定期更新,大部分视频分辨率支持2K超清,学员可以看清每一行代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值