为了账号安全,请及时绑定邮箱和手机立即绑定

尝试将旧的 pascal 脚本转换为 python:pascal“记录”的问题

尝试将旧的 pascal 脚本转换为 python:pascal“记录”的问题

幕布斯7119047 2021-08-11 19:42:53
我目前的任务是将旧的 pascal 脚本翻译成 python。问题是,我对 pascal 没有任何经验......直到现在,一切都很好(大部分脚本都是不言自明的),但现在我遇到了一小段代码,我只是想不通出去:# some other code here...type MeasurementPoint = record                         lambda : double;                         value : double;                        end;# some more code...procedure foo(MyFileName: string, somemoreargs):var  somevars: integer;      somemorevars: double;     temp: MeasurementPoint; # even more code...  i:= 0;  Assign(MyInFile,MyFileName);  Reset(MyInFile);  repeat    Inc(i);    SetLength(Reflexion, i);    readln(MyInFile, temp.lambda, temp.value);    Reflexion[i-1]:=temp;  until EoF(MyInFile);  Close(MyInFile);我只是无法理解这部分代码应该做什么......我非常理解MyInFile正在逐行读取完整文件,并且每行包含两个值,即'lambda'和'value',它们被提取作为双打。根据 pascal wiki,record容器是否能够容纳不同类型的对象并在逻辑上将它们组合在一起(这可以与 python 中的字典进行比较吗?)。如果我理解SetLength正确,它用于定义数组的长度,这在这里很有意义。i每次读取一行时都会增加,因此temp增加的长度以适应已从文件中提取的lambda和value对的数量(如果我的假设错误,请纠正我!)。但我不明白其余的代码应该做什么,尤其是Reflexion[i-1]:=temp. 是长度为 i-1Reflexion的类型的对象MeasurementPoint吗?或者那部分是什么意思?为什么lambda和value提取为temp.lambda和temp.value? 这是否会自动将它们配对在记录中......?如果有人可以通过解释这一点来帮助我,我将不胜感激。而且,当然,如果您碰巧知道如何将其转换为 python 3.x,那就更好了 ;-)
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

Pascal 的record就像 Python 的namedtuple. 一个记录(namedtuple )在函数中被逐个字段读取(因此temp.lambdatemp.valuereadLn

Reflexion[i-1]:=temp看起来像一个list记录数组(Python 的)。由于数组具有恒定长度(在初始化时声明;n-1),因此新记录存储在连续的槽中。

我希望这能回答您关于 Pascal 代码功能的问题...


查看完整回答
反对 回复 2021-08-11
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号