【发布时间】:2018-06-19 07:39:35
【问题描述】:
我有以下 Pascal 例程:
function TForm1.ldExtractFromLine (ldline: String; Post: Integer): String;
var
s: String;
t: array[1..15] of String;
i, iT: Integer;
begin
s := Trim(ldline);
iT := 1;
while s <> '' do
begin
s := Trim(s) + ' ';
i := 1;
while s[i] <> ' ' do Inc(i);
t[iT] := Copy(s, 1, i-1);
Inc(iT);
s := Copy(s, i, Length(s));
end;
ldExtractFromLine := '';
if Post < iT then ldExtractFromLine := t[Post];
end;
我正在尝试转换为 Python。这是我目前所拥有的:
def ldExtractFromLine (ldline, post):
post -= 1 # mjh
t = []
s = ldline.strip()
iT = 0; # mjh
while s <> '':
s = s.strip() + ' '
i = 0 # mjh
while s[i] <> ' ': i += 1
# t[iT] = Copy(s, 1, i-1)
# function Copy(const S: string; From: integer = 1; Count: integer = MaxInt): string;
t.insert(iT, s[0:i-1+1]) # mjh
iT += 1
s = s[i:(i+len(s)+1)]
print "lala"
result = ''
if post < iT: result = t[post] # mjh
return result
但是,执行例程会导致无休止的“lala”打印到标准输出。问题是 Pascal 列表从索引 1 开始,而 Python 列表从索引 0 开始。这真的让我很困惑。谁能找到我的错误?变量post 是一个通常小于20 的整数。变量ldline 是一个字符串,看起来有点像“1 0 60 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat”。
[编辑]
整个脚本可以在这里查看:
https://github.com/Jeremy1980/LDBoxer
这里是一些示例输入数据:
0 Safe House
0 Name: building_013_safehouse.ldr
0 Author: Kevin Loch
0 ROTATION CENTER 0 0 0 1 "Custom"
0 ROTATION CONFIG 0 0
1 0 60 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 60 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 -20 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 -20 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 -100 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 -100 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 -180 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
1 0 -180 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
更多输入数据的例子可以在这里找到:
【问题讨论】:
-
这段代码应该做什么?什么是正确的结果?
-
<>看起来至少是边缘的,如果不是完全错误的话。见stackoverflow.com/questions/16749121/what-does-mean-in-python -
您是否真的试图在空格上分割字符串?
ldline.split()这样做。
标签: python