Fortran含整数表达式的if语句及数字标号作用咨询
Fortran两类条件语句解析(附Python转写示例)
1. 仅含整数表达式的if语句逻辑
早期Fortran(如Fortran 77)中,if(整数表达式)这类语句的判断依据是表达式结果的符号:
- 当表达式结果小于0时,条件成立,执行紧跟的代码
- 当结果等于0或大于0时,条件不成立,跳过后续代码
直白点说,if(n-kv)完全等价于Python代码里的 if (n - kv) < 0:
2. 带数字标号的算术if语句
这种是Fortran独有的算术if语句,格式为 if(整数表达式) 标号1,标号2,标号3,核心是根据表达式结果的符号跳转到对应标号的代码行:
- 表达式结果小于0:跳转到
标号1标记的代码行 - 表达式结果等于0:跳转到
标号2标记的代码行 - 表达式结果大于0:跳转到
标号3标记的代码行
拿你提供的代码举例:
if(n-kv)30,20,20:如果n-kv < 0,就跳转到标号30的行;如果n-kv >= 0,就跳转到标号20的行if(kv) 50,50,40:如果kv <= 0,跳转到标号50的行;如果kv > 0,跳转到标号40的行
原Fortran代码转写为Python
结合上面的规则,你给出的Fortran代码可以转写为如下Python代码(注意Python列表是0索引,和Fortran的1索引需调整):
for l in range(1, nbn + 1): l1 = 2 * l - 1 no = ib[l1 - 1] # 转换为Python的0索引 k1 = no - 1 kr = k1 + 1 for j in range(2, ms + 1): kv = kr + j - 1 # 对应原if(n-kv)30,20,20 if (n - kv) >= 0: tk[kr - 1][j - 1] = 0 # 不管上面条件是否成立,都执行标号30的代码:重新赋值kv kv = kr - j + 1 # 对应原if(kv)50,50,40 if kv > 0: tk[kv - 1][j - 1] = 0 # 否则直接进入下一次j循环(对应跳转到50 continue) tk[kr - 1][0] = 1 # 对应原tk(kr,1)=1
内容的提问来源于stack exchange,提问作者Fabián Alquinta
相关产品推荐
相关产品推荐

