1

我现在正在做 Google 的 Python 教程,并且正在完成文件 list1.py。

我应该def match_ends(words)用我自己的代码填写该部分,该代码应该计算输入中有多少单词words同时具有:超过 2 个字母以及相同的开头和结尾字母。

当我运行我使用 python 2.7 编写的代码时,它运行良好。但是当我使用 3.2 运行它时,它没有。此外,当我在 IDLE 3.2 中键入它说有问题的行时,麻烦的行运行良好。

这是 list1.py:

def match_ends(words):
  count = 0
  for x in words:
    if len(x) >= 2 and x[0] == x[len(x)-1]:
        count += 1
  return count
def test(got, expected):
  if got == expected:
    prefix = ' OK '
  else:
    prefix = '  X '
  print('%s got: %s expected: %s' % (prefix, repr(got), repr(expected)))
def main():
  print('match_ends')
  test(match_ends(['aba', 'xyz', 'aa', 'x', 'bbb']), 3)
  test(match_ends(['', 'x', 'xy', 'xyx', 'xx']), 2)
  test(match_ends(['aaa', 'be', 'abc', 'hello']), 1)
if __name__ == '__main__':
  main()

当我在 Python 2.7 的命令行中运行它时,它工作正常,输出:

 OK  got: 3 expected: 3
 OK  got: 2 expected: 2
 OK  got: 1 expected: 1

当我在 Python 3.2 的命令行中运行它时,它不起作用,输出:

  File "D:\Projects\Programming\Python\Tutorials\Google Python Class\google-python-exercises\basic\list1.py", line 26
    if len(x) >= 2 and x[0] == x[len(x)-1]:
                                          ^
TabError: inconsistent use of tabs and spaces in indentation

最后,当我使用 IDLE 3.2 时,我得到:

>>> def match_ends(words):
    count = 0
    for x in words:
        if len(x) >= 2 and x[0] == x[len(x)-1]:
            count += 1
    return count

>>> match_ends(["heh", "pork", "veal", "sodas"])
2

我对 Python 非常陌生,生成的大多数错误都需要一些时间才能弄清楚,但我已经坚持了一段时间。我想不通。为什么它不能在 Python 3.2 中工作,并且只有在我执行命令行版本时才能工作?我该如何解决?

4

2 回答 2

3

您可能正在混合制表符和空格字符,这在 Python 3.x 中不再允许。您可以通过在文本编辑器中显示空白字符来解决此问题。

如果源文件混合制表符和空格的方式使含义取决于空格中制表符的价值,则缩进会被拒绝;在这种情况下会引发 TabError。

引自:http ://docs.python.org/py3k/reference/lexical_analysis.html#indentation

于 2012-09-30T00:51:36.907 回答
2

第三行以两个空格开头,而第四行以一个制表符开头。我猜 Python 2 比 Python 3 更能容忍不一致。

于 2012-09-30T00:46:53.677 回答