2016-10-31 2 views
-2

У меня есть задача, требующая от меня распечатать ' a xxx yy ' (пробелы включены) из списка v_niz(['', 'a', '', '', '', 'x', 'x', 'x', '', 'y', 'y', '', '']). Мой код до сих пор:Имя не определено при добавлении

def v_niz(plosca): 
    b = [] 
    for e in plosca: 
     if e == "": 
      b.append("") 
     if e == 'a' : 
      b.append(a) 
     if e == 'x': 
      b.append(x) 
     if e == 'y': 
      b.append(y) 
    return b 

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

+2

Ну ... 'Ā' действительно * не * определено. Ни то, ни другое не являются 'x' и' y'. – deceze

+1

Почему бы вам не использовать '' a'', ''x'' и' 'y''? –

+0

Также ... разве вы не просто восстанавливаете 'plosca'? 'def v_niz (plosca): return plosca' будет делать то же самое в данном примере. – deceze

ответ

3

Прежде всего, если вы начинаете с b = [], вы просто собираетесь создать другой список. Если вы пытаетесь создать строку, вы должны иметь:

b = "" 

И приложить к концу этого, используйте синтаксис:

b = b + "a" 
# or the shorthand: 
b += "a" 

Теперь, как для логики вашего метода. Вы не добавляете то, что, по вашему мнению, добавляете. Например:

b.append(a) 

пытается добавить некоторую переменную a в конце списка b. Кажется, что вы хотели добавить символ или строку 'a':

# for a list use 
b.append('a') 
# for a string use: 
b += "a" 

То же самое касается и xy, вам нужно использовать кавычки вокруг них: 'x' и 'y'. Кроме того, вы не собираетесь, чтобы добавить место для:

b.append("") 

Вы должны фактически поместить пространство в строку, в противном случае вы просто добавить пустую строку в конец b которого составляет, по существу, никаких изменений в b , Вы должны попробовать:

# for a list use 
b.append(" ") 
# for a string use: 
b += " " 

Факторинг во всех этих изменениях грубый скелет кода должен идти больше как:

def v_niz(plosca): 
    b = "" 
    for e in plosca: 
     if e == "": 
      b += " " 
     if e == 'a' : 
      b += 'a' 
     # ... 
    return b 
+0

Мне также был предоставлен тестер для проверки правильности кода, и даже с изменениями код все равно не будет проходить через тестер. Я не знаю, что делать .. –

+1

На самом деле лучше сохранить 'b' в виде списка, а затем« присоединить »его к концу. Нехорошо добавлять строки, поскольку они неизменяемы. Кроме того, просто используйте 'if e in {'a', 'x', 'y'}:' –

+0

Но я действительно предпочитаю 'return '' .join ('' if x == '' else x for x in plosca) ' –

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