在Python Windows和Python OSX中获取不同的值

  • 本文关键字:Python 获取 Windows OSX python
  • 更新时间 :
  • 英文 :


我遇到了一个问题,我有一个大学的项目,当我运行Mac版本的python编译器和Windows版本的python编译器时,我得到了不同的值。

Python版本:2.7图书馆:Numpy

有线索吗?

p161和pNUMBER是numpy中坐标为[0,1,2]的数组我的代码:

#PASO 38
print OPCION
print "PASO 38 - ESTRUCTURA DE COSTOS TOTALES POR PRODUCTO [ DATOS EXPRESADOS EN PORCENTAJES DEL COSTO TOTAL DEL PRODUCTO ]"
print
paso38517=numpy.array([100*p161[0]/p351[0],100*p231[0]/p351[0],100*p301[0]/p351[0]])
paso38525=numpy.array([100*p161[1]/p351[1],100*p231[1]/p351[1],100*p301[1]/p351[1]])
paso38535=numpy.array([100*p161[2]/p351[2],100*p231[2]/p351[2],100*p301[2]/p351[2]])
print     "TIPO              517    525    535"
print     "_____________________________________"
print str("MATERIA PRIMA   : ")+ numpy.array_str(paso38517[0])+str("%    ")+numpy.array_str(paso38525[0])+str("%    ")+numpy.array_str(paso38535[0])+str("%")
print str("MANO DE OBRA    : ")+ numpy.array_str(paso38517[1])+str("%    ")+numpy.array_str(paso38525[1])+str("%    ")+numpy.array_str(paso38535[1])+str("%")
print str("USO DE MAQUINA  : ")+ numpy.array_str(paso38517[2])+str("%     ")+numpy.array_str(paso38525[2])+str("%     ")+numpy.array_str(paso38535[2])+str("%")
print     "_____________________________________"
print
#PASO 39
paso39=numpy.array([100*mp1/costofinal,100*mo1/costofinal,100*um1/costofinal])
print OPCION
print "PASO 39 - ESTRUCTURA DE COSTOS TOTAL [ DATOS EXPRESADOS EN PORCENTAJES DE LOS COSTOS TOTALES ]"
print
print     "TIPO                COSTO"
print     "____________________________"
print str("MATERIA PRIMA   : ")+ numpy.array_str(paso39[0])+str("%")
print str("MANO DE OBRA    : ")+ numpy.array_str(paso39[1])+str("%")
print str("USO DE MAQUINA  : ")+ numpy.array_str(paso39[2])+str("%")
print     "____________________________"
print 

在windows和mac上也是如此,之后我有一些打印

在MAC:上打印

OXICORTE - SOLDADURA MANUAL
PASO 38 - ESTRUCTURA DE COSTOS TOTALES POR PRODUCTO [ DATOS EXPRESADOS EN PORCENTAJES DEL COSTO TOTAL DEL PRODUCTO ]
TIPO              517    525    535
_____________________________________
MATERIA PRIMA   : 76%    76%    73%
MANO DE OBRA    : 17%    17%    20%
USO DE MAQUINA  : 6%     6%     6%
_____________________________________
OXICORTE - SOLDADURA MANUAL
PASO 39 - ESTRUCTURA DE COSTOS TOTAL [ DATOS EXPRESADOS EN PORCENTAJES DE LOS COSTOS TOTALES ]
TIPO                COSTO
____________________________
MATERIA PRIMA   : 75%
MANO DE OBRA    : 17%
USO DE MAQUINA  : 6%
____________________________

在WINDOWS上打印:

OXICORTE - SOLDADURA MANUAL
PASO 38 - ESTRUCTURA DE COSTOS TOTALES POR PRODUCTO [ DATOS EXPRESADOS EN PORCENTAJES DEL COSTO TOTAL DEL PRODUCTO ]
TIPO              517    525    535
_____________________________________
MATERIA PRIMA   : **-2%**    **16%**    73%
MANO DE OBRA    : **-9%**    **17%**    20%
USO DE MAQUINA  : 6%     6%     6%
_____________________________________
OXICORTE - SOLDADURA MANUAL
PASO 39 - ESTRUCTURA DE COSTOS TOTAL [ DATOS EXPRESADOS EN PORCENTAJES DE LOS COSTOS TOTALES ]
TIPO                COSTO
____________________________
MATERIA PRIMA   : **-8%**
MANO DE OBRA    : **1%**
USO DE MAQUINA  : 6%
____________________________

更新:

所有阵列在两个操作系统中都可以,问题在于p161[0]/p351[0]和其他分区,在MAC中,我得到0.76,在Windows中得到0.0,然后在那之后,当我做*100时,在Windows中将得到-2作为输出。

此示例位于PASO38 MATERIA PRIMA 517上。

问题出在p161[0]/p351[0]和其他部分。在Mac上我得到0.76,在Windows上我得到0.0。

这听起来很像你的除法运算符在Mac上执行浮点除法,在Windows上截断整数除法。如果你在Mac上运行Python 3,在Windows上运行Python 2,就会发生这种情况。但老式的print语句表明情况并非如此。如果你执行了,也会发生这种情况

from __future__ import division

在Mac上,但不在Windows代码中。

既然你显然想要浮点除法,那么你应该做以下操作之一,无处不在:

  1. 使用Python 3,其中/始终表示真正的浮点除法
  2. 使用from __future__ import division
  3. 在执行除法之前,将其中一个操作数转换为float

最新更新