2

我正在用python编写一个系统发育树程序,我遇到了一个我以前没有遇到过的小问题,我已经研究过了,没有什么能完全描述我遇到的问题,我从这段代码中得到一个语法错误:

 for x in range(len(matrix)):
            # Print the label
            print(seq0[x-1], end == ' ') if x > 0 else print( ' ', end == '')

错误说:

 File "/home/brandon/OptimalAlignmentSensitive.py", line 206
print(seq0[x-1], end == ' ') if x > 0 else print( ' ', end == '')

它指向第二个打印语句中的“t”。有没有其他人有这个问题?我不明白该怎么做我尝试添加空格等,但没有任何帮助。

4

2 回答 2

4

Try adding from __future__ import print_function, and writing print(' ', end='') with a single '=' in the print function.

于 2013-04-16T19:43:46.273 回答
1

您的问题是使用三元运算符。您正在使用 2.x,其中print是一个语句 - 而三元运算符只接受表达式。将其替换为以下if语句:

 for x in xrange(len(matrix)):
     if x > 0:
         print(seq0[x-1], end == ' ')
     else:
         print(' ', end == '')

这可能不会做你想要的。这将打印 a tuple,而您可能想使用 3.xprint()函数中的关键字参数。这在 2.x 中不存在,相反,该功能是通过留下一个尾随逗号(没有括号来构造一个元组)来产生的。

 for x in range(len(matrix)):
     if x > 0:
         print seq0[x-1], 
     else:
         print " ",

一般来说,使用三元运算符来模拟单行if语句无论如何都是一种不好的做法,即使它确实有效。正如我在评论中所说,按索引迭代通常是一个坏主意,并且可能会被删除,但这需要对手头的操作有更多的了解。

于 2013-04-16T20:02:01.817 回答