在Python 3.2和2.6之间w.write的差异?

Str*_*247 -2 python file

我有一个功能,我在两台不同的机器上使用,一台运行Python 2.6版本的Mac,另一台运行版本为3.2的联想.该功能将数据写入文件并在循环中调用.当使用Python 3.2时,它按预期工作,我得到如下所示的输出

25.0    25.0    25.0    0
25.0    25.0    75.0    0
25.0    25.0    125.0   0
25.0    25.0    175.0   0
25.0    25.0    225.0   0
25.0    75.0    25.0    0
25.0    75.0    75.0    0
25.0    75.0    125.0   0
25.0    75.0    175.0   0
25.0    75.0    225.0   0
Run Code Online (Sandbox Code Playgroud)

当我在运行2.6版本的机器上运行它时,我得到了这个

175.0   25.0    75.0    2
175.0   25.0    125.0   0
25.0    25.0    25.0    0   Should be first line
175.0   25.0    175.0   0
25.0    25.0    75.0    0   Should be second line
175.0   25.0    225.0   0   
25.0    25.0    125.0   1
175.0   75.0    25.0    0
25.0    25.0    175.0   1
175.0   75.0    75.0    2
Run Code Online (Sandbox Code Playgroud)

这是代码

def filesave(Xc,Yc,Zc,S): 
 Xc = str(Xc)
 Yc = str(Yc)
 Zc = str(Zc)
 Xs = str(S)
 #Ms = str(Ma)   
 w = open("Myout.txt.","a+")
 w.write(Xc)
 w.write('\t')
 w.write(Yc)
 w.write('\t')
 w.write(Zc)
 w.write('\t')
 w.write(Xs)
 w.write('\n')
 w.close()
 return()
Run Code Online (Sandbox Code Playgroud)

这两个版本之间是否存在差异?谢谢!

编辑

其余的代码

def cell_centers():
 read_file(F)
 dx = dy = dz= float(input('Please enter a value for dr:'))    #length of cell side 
 N  = int(input('Please enter a value for N:')) #N^3 Number of cells to be created
 Xc = zeros(N)       #array creation
 Yc = zeros(N)
 Zc = zeros(N)
 x1=0
 y1=0
 z1=0
 county = 0
 countz = 0

 for i in range(N):          #for loops to define cell centers
    Xc[i] = dx/2 +x1                  
    xmin = Xc[i]-dx/2
    xmax = Xc[i]+dx/2
    x1+=dx                   #increments x1 positions by dx
    for j in range(N):
      Yc[j] = dy/2 +y1
      ymin = Yc[j]-dy/2
      ymax = Yc[j]+dy/2
      county+=1
      if county==N:          #if else statement resets y1 to zero
        y1=0
        county=0
      else:
        y1+=dy
      for k in range(N):
         Zc[k] = dz/2 +z1
         countz+=1
         zmin = Zc[k]-dz/2
         zmax = Zc[k]+dz/2
         if countz==N:
          z1=0   
          countz=0
         else:
          z1+=dz
         counter(Xc[i],Yc[j],Zc[k],N,xmin,xmax,ymin,ymax,zmin,zmax,*read_file(F))

 return()        



def counter(Xc,Yc,Zc,N,xmin,xmax,ymin,ymax,zmin,zmax,Xa,Ya,Za):
 Cellcount = zeros(1)   
 S = (((xmin <= Xa) & (Xa <= xmax))& #count what is in specific range
     ((ymin <= Ya) & (Ya <= ymax))&
     ((zmin <= Za) & (Za <= zmax))).sum()

 for l in range(1):
   Cellcount[l]= S
 filesave(Xc,Yc,Zc,S)
 return()
Run Code Online (Sandbox Code Playgroud)

Lev*_*von 5

我打算走出去,说你观察到的差异是由于版本2.x和3.x之间的分歧发生了变化.(看起来有很多分裂,我不知道数字是什么类型,整数或浮点数)

在2.x中,在使用整数进行除法时会得到整数截断.这不会发生在v 3.x中

Python 2

In [267]: 5 / 2
Out[267]: 2
Run Code Online (Sandbox Code Playgroud)

Python 3:

In [1]: 5 / 2
Out[1]: 2.5
Run Code Online (Sandbox Code Playgroud)

你的代码做了很多分工.

如果您仍想要旧的整数除法行为,可以使用//Python 3:

Python 3:

In [2]: 5 // 2
Out[2]: 2
Run Code Online (Sandbox Code Playgroud)

更改分部操作员详细说明了这一点.

新功能在Python 3.0中,从第2版到第3版重大变化

如果你想在Python 2.2+中使用新的除法行为,你可以使用该from __future__ import division指令(感谢@Jeff提醒我).

Python 2:

In [1]: 5 / 2
Out[1]: 2

In [2]: from __future__ import division

In [3]: 5 / 2
Out[3]: 2.5
Run Code Online (Sandbox Code Playgroud)

更新:

最后,请考虑划分作为一个原因的潜在问题(因此,这些线可能没有出现故障,但结果是不同的,因为划分使它只是出现这种方式).那可能吗?另请注意,第4列(3.x输出)全部为零... 2.x输出中不存在,并且进一步指向结果计算可能出现的问题 - 实际上结果是不同的而不是秩序