我有一个功能,我在两台不同的机器上使用,一台运行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)
我打算走出去,说你观察到的差异是由于版本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输出中不存在,并且进一步指向结果计算可能出现的问题 - 实际上结果是不同的而不是秩序