相当于Python for Fortran 77中的枚举列表

相当于Python for Fortran 77中的枚举列表,python,fortran,fortran77,Python,Fortran,Fortran77,我已经编写了一个python代码,如下所示,该代码正在运行,我希望得到一些帮助,以便将该代码复制到Fortran 77 我面临的主要问题是Fortran 77的enumerate(x)的等价物。我真的很感激如果有人谁是习惯于在F77编程来帮助我 import math x = [1., -6., 7., -9., 8., 9., 5., 7., -7., 0.] for i, x[i] in enumerate(x): print 'Values of x =', x[i] y =

我已经编写了一个python代码,如下所示,该代码正在运行,我希望得到一些帮助,以便将该代码复制到Fortran 77

我面临的主要问题是Fortran 77的enumerate(x)的等价物。我真的很感激如果有人谁是习惯于在F77编程来帮助我

import math

x = [1., -6., 7., -9., 8., 9., 5., 7., -7., 0.]

for i, x[i] in enumerate(x):
  print 'Values of x =', x[i]


y = [3., 6., 3., 7., 1., 7., -2., 0., 3., 7.]

for i, y[i] in enumerate(y):

  print 'Values of y =', y[i]

br  = [1., 2., 8., 0., 7., 3., 6., 9., 0., 2.]

for i, br[i] in enumerate(br):

   print 'corresponding brightness, br = ',br[i]

r_cut = input("Please give me a value of r_cut:  ")

total = 0

for i in xrange(0,10):
    if (x[i]**2 + y[i]**2)**0.5 < r_cut:
        total += br[i]

print 'total brightness = ', total
导入数学
x=[1.,-6,7.,-9,8,9,5,7.,-7,0.]
对于枚举(x)中的i,x[i]:
打印“x=”的值,x[i]
y=[3,6,3,7,1,7.-2,0,3,7.]
对于枚举(y)中的i,y[i]:
打印“y=”的值,y[i]
br=[1,2,8,0,7,3,6,9,0,2]
对于枚举(br)中的i,br[i]:
打印“相应亮度,br=”,br[i]
r\u cut=输入(“请给我一个r\u cut:”的值)
总数=0
对于x范围内的i(0,10):
如果(x[i]**2+y[i]**2)**0.5
没有任何与pythonenumerate等效的方法,但是在您的例子中,您可以使用一个简单的do循环,顺便说一下,我是用F90编写的,这是一些功能不属于F77,另一方面,几乎所有编译器都支持现代Fortran

program test
implicit none
integer :: i
real :: x(10), y(10), br(10), total, r_cut

r_cut = 8.0

x = [1., -6., 7., -9., 8., 9., 5., 7., -7., 0.]
do i = 1, size(x)
   print *, 'Value of x is:', x(i)
enddo

y = [3., 6., 3., 7., 1., 7., -2., 0., 3., 7.]
print *,'Value of y is ', y

br  = [1., 2., 8., 0., 7., 3., 6., 9., 0., 2.]
print *, 'Value of br is:', br

print *, 'Give me a value for r_cut'
read(*,*) r_cut

total = sum(br, mask = x**2 + y**2 < r_cut**2)

print *, 'Total', total

end program

基本上,每一条语句都应该从第7列开始,你不再需要矢量指令(因此你必须一个元素一个元素地填充矢量,除非你从文件中读取它)。

因为他问了一个循环,我想告诉他如何编写它。:-)我为其他变量添加了指令。好的,我添加了一个版本,应该是F77(我使用了一些…来表示类似的重复指令)@EdmondoGiovannozzi:非常感谢!我真的很感激!顺便说一句,如果您使用numpy,您可以在python中使其更快。即导入numpy,然后使用
x=numpy.array(x)
转换numpy数组中的所有列表,类似于其他列表y和br。然后
total=br[x**2+y**2
我不明白你为什么要在这里使用
enumerate
。您甚至从未使用过
i
。在python中,只需对x中的val执行
:打印'valuesofx=',val
      real x(10), y(10), br(10), total, r_cut
      integer i

      x(1) = 1.0
      x(2) = -6.0

      ....

      do i = 1, 10
          write(*,*) 'Value of x is', x(i)
      enddo

      y(1) = 3.0
      y(2) = 6.0
      .....

      br(1) = 1.0
      br(2) = 2.0
      br(3) = 8.0
      .....

      write(*,*) 'Give me a value for r_cut'
      read(*,*) r_cut

      total = 0
      do i=1, 10
          if (x(i)**2 + y(i)**2 .lt. r_cut**2) then
               total = total +  br(i)
          endif
      enddo

      print *, 'Total'
      end