1

最近我一直在研究一个 GUI python 纯文本编辑器。该代码调用以下函数,该函数应该计算已输入文本小部件的行数:

def numlines():
    targetline = textPad.get(1.0, END)
    targetline.split()
    lines = 0
    for line in targetline:
        lines += 1
    return lines

代码运行,但是它没有给我文件中正确的行数。事实上,似乎每行的字母数和空格会影响行数(例如:在两行上我输入两个字母。我得到 6 行)。我找不到这个问题的解释。

我正在使用 python 2.7.9 和 tkinter 在 Windows 7 上运行。

4

1 回答 1

1

代替:

targetline.split()
lines = 0
for line in targetline:
    lines += 1
return lines

和:

return len(targetline.split('\n'))

例子

让我们创建一个示例targetline

>>> targetline="line 1\nline 3\nline 3"
>>> print targetline
line 1
line 3
line 3

现在,让我们数一下行数:

>>> len(targetline.split('\n'))
3

我在这里没有解决的一个问题是textPad.get实际返回的问题。它是否\n用于行分隔符?\n它是否在最后一行提供决赛?在代码正确之前,您需要解决这些问题。

讨论

考虑这一行:

targetline.split()

让我们将其应用于上面的示例:

>>> targetline.split()
['line', '1', 'line', '3', 'line', '3']

有两点需要注意:

  1. 默认情况下,它会在所有空格上拆分。

  2. 它返回一个列表。它不会改变targetline

现在考虑:

lines = 0
for line in targetline:
    lines += 1
return lines

由于targetline未被 更改split,因此for循环遍历 中的每个字符targetline。因此,此循环计算targetline.

它只需要对象的长度,不需要这样的循环。len功能更简单。

于 2015-02-12T23:03:36.723 回答