2013-04-16 2 views
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 == '') 

и он указывает на «т» во втором заявлении для печати. У кого еще возникла эта проблема? я не понимаю, что делать, я пытался добавить пробелы и такие, но ничего не помогает.

+1

'=' вместо '==' –

+3

Злоупотребление тернарным выражением, подобное этому, является плохой идеей, используйте нормальный оператор 'if'. Цикл по индексу также очень плохая идея. –

+1

does 'seq0 [x-1]' всегда существует? (также, когда 'x = 0' и' x-1 = -1') –

ответ

4

Попробуйте добавить from __future__ import print_function и напишите print(' ', end='') с помощью одного '=' в функции print.

+0

В чем проблема 'end == '''? Может быть, 'Name Error', если' end' там не определен, но почему 'Syntax Error'? – MostafaR

+0

@MostafaR Поскольку именованные аргументы задаются с одним '='. Это синтаксис языка, следовательно, ошибка. 'end' здесь не нужно определять, это имя параметра, а не переменная. –

+2

@Lattyware OK, но если вы напишете его с '==', это будет условный оператор, поэтому он должен быть 'False' или' True', если 'end' определен, иначе это вызовет' NameError: name ' end 'не определен'. – MostafaR

1

Ваша проблема заключается в использовании тернарного оператора. Вы используете 2.x, где print - инструкция - в то время как тернарный оператор принимает только выражения. Заменить его с if заявлением:

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

Это, вероятно, не будет делать то, что вы хотите, хотя. Это напечатает tuple, тогда как вы, вероятно, захотите использовать аргумент ключевого слова из функции 0x3.x. Это не существует в 2.x, и вместо этого эта функция создается, оставляя конечную запятую (без скобок для построения кортежа).

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

В общем, с трехзначным оператором эмулировать единую линию if заявление плохая практика в любом случае, даже там, где она работает. Как отмечалось в моих комментариях, итерация по индексу, как правило, плохая идея и, вероятно, может быть удалена, но для этого потребуется больше понимания операции.

Смежные вопросы