Comparison of “If” & “While” among Fortran, Matlab, Python
Fortran、Matlab、Python中的if判断语句和while循环语句的对比
前言 Intro
一次课程设计要求将一个fortran语言编写的截面分析程序(切片法,条带法)用其他语言改写,过程中涉及了fortran、matlab代码的阅读理解以及python的编写。其中尤其判断语句和循环语句的嵌套关系的转写尤为复杂,在此记录下心得感悟。
示例代码
先来一段示例代码
# fortran
40 CONTINUE
F1=ZM1-WJMAX*0.80
CALL QWJ(QL2,II,ZM2,QL,WJ) !调用“求弯矩”程序,求得ZM2
F2=ZM2-WJMAX*0.80
IF(F1*F2.GT.0.0)THEN !如果F1、F2同号,则继续回退
QL1=QL2
ZM1=ZM2
QL2=QL2-DF1
GOTO 40
ENDIF
# matlab
while 1
F1=ZM1-WJMAX*0.8;
ZM2=QWJ(QL2,i,QL,WJ);
F2=ZM2-WJMAX*0.8;
if(F1*F2>0)
QL1=QL2;
ZM1=ZM2;
QL2=QL2-DF1;
else
break;
end
end
# python
while 1:
F1 = ZM1-WJMAX*0.8
ZM2 = QWJ(QL2,i,QL,WJ)
F2 = ZM2-WJMAX*0.8
if(F1*F2>0):
QL1 = QL2;
ZM1 = ZM2;
QL2 = QL2-DF1
else:
break
If 判断语句
Fortran和Matlab的判断语句都带有end if,且if (和else) 后无需加上“:”,if判断语句的结尾用end if来确定。而python的if(和else)后必须加上“:”,且仅通过缩进来判断if语句的内容范围。
# fortran
IF(F1*F2.GT.0.0)THEN !如果F1、F2同号,则继续回退
QL1=QL2
ZM1=ZM2
QL2=QL2-DF1
GOTO 40
ENDIF
# matlab
if(F1*F2>0)
QL1=QL2;
ZM1=ZM2;
QL2=QL2-DF1;
else
break;
end
# python
if(F1*F2>0):
QL1 = QL2;
ZM1 = ZM2;
QL2 = QL2-DF1
else:
break
While循环语句
严格来说,fortran中的循环语句应该不可以称为while循环语句,但这里为了方便权且这么称呼,fortran用的是CONTINUE+GOTO,其功能和matlab、python中的while+if…break应该是相似的。
# fortran
40 CONTINUE
IF(F1*F2.GT.0.0)THEN !如果F1、F2同号,则继续回退
QL1=QL2
GOTO 40
ENDIF
# matlab
while 1
if(F1*F2>0)
QL1=QL2;
else
break;
end
end
# python
while 1:
if(F1*F2>0):
QL1 = QL2;
else:
break
其他
还有些小的不同点也随手记录下
例如matlab中在list应当就是数组了,在数组末尾添加一个新的元素的命令是
A= [A, new_element]
在python中,自带的list其实是列表,不仅可以存放数字,也可以存放其他的数据类型。其对应的添加新元素命令为
A = [] A.append(new_element)
而且,用range()函数生成的生成的是生成器,不可直接用上述方法添加新的元素哦。python中对应的专用数组,应该是Numpy库中的nd.array数据类型,也是这一原因,python中用matplotlib成图比较稳妥的方法,是用numpy先把list转成nd.array再生成图片。nd.array中添加新元素的命令为
A_arr = numpyp.append(A_arr, new_element)
对于A_arr,此时的append是作为numpy库的一个独立函数被调用,而不是作为实例化后的list A的内置函数