Comparison of “If” & “While” among Fortran, Matlab, Python
Fortran、Matlab、Python中的if判断语句和while循环语句的对比
前言 Intro
一次课程设计要求将一个fortran语言编写的截面分析程序(切片法,条带法)用其他语言改写,过程中涉及了fortran、matlab代码的阅读理解以及python的编写。其中尤其判断语句和循环语句的嵌套关系的转写尤为复杂,在此记录下心得感悟。
示例代码
先来一段示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# 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语句的内容范围。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# 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应该是相似的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 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应当就是数组了,在数组末尾添加一个新的元素的命令是
1 |
A= [A, new_element] |
在python中,自带的list其实是列表,不仅可以存放数字,也可以存放其他的数据类型。其对应的添加新元素命令为
1 2 |
A = [] A.append(new_element) |
而且,用range()函数生成的生成的是生成器,不可直接用上述方法添加新的元素哦。python中对应的专用数组,应该是Numpy库中的nd.array数据类型,也是这一原因,python中用matplotlib成图比较稳妥的方法,是用numpy先把list转成nd.array再生成图片。nd.array中添加新元素的命令为
1 |
A_arr = numpyp.append(A_arr, new_element) |
对于A_arr,此时的append是作为numpy库的一个独立函数被调用,而不是作为实例化后的list A的内置函数