2016-08-08 7 views
-6

Я не уверен, почему этот код не работает. Я пытаюсь перебрать копию списка слов и заменить слова другим заданным словом. Вместо этого я получаю недопустимые синтаксические ошибки. Теперь я понимаю (от чтения других сообщений здесь), что изменение списков при итерации - это плохая практика, поэтому я создал копию, используя [:]. Вот код, у меня есть:Python: замена слов во время итерации

def change(z): words = z.split() for i in words[:]: if 'because' in i: words.replace(i, 'as') print(words) change(input("Line: "))

И ошибка:

Traceback (most recent call last): File "C:/Users/Jarrod/Desktop/py/NCSS2016Adv/kindleNook.py", line 9, in <module> change(input("Line: ")) File "<string>", line 1 is as ^ SyntaxError: invalid syntax

Любые ключи к разгадке, почему мой синтаксис неправильно было бы весьма признателен.

+5

Ваш отступ выключен ... Отступы все ниже 'def'. Кроме того, в следующий раз опубликуйте сообщение об ошибке с полной трассировкой. – Selcuk

+0

Жаль, что я довольно новичок в этом. Я исправлю это :) – adep7

+0

@Lafexlos Вопрос о синтаксических ошибках. Тем не менее это показывает очень минимальное понимание. –

ответ

-3

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

В любом случае, в вашем коде i будет строкой, а не списком, потому что вы перебираете список из split с помощью своей петли. Итак, возможно, вы должны использовать if i == 'because', а не if 'because' in i?

+0

Это действительно невозможно предсказать, что автор действительно хочет из этой функции из-за того, насколько ужасно нарушен код.Возможно, они действительно хотят, чтобы «потому что» был заменен, если он находится в строке не только, если он равен строке, но кто знает? –

+0

@ Oasiscircle, ah, что имеет смысл, извините за все это, я должен включить все эти подробности во время публикации. То, что я действительно хочу сделать, это заменить только строку, если она не совпадает с ней, если она находится в строке. Спасибо – adep7

+2

Изменение проверки членства на проверку равенства не может разрешить 'SyntaxError'. Я не знаю, почему это принято. @ adep7, действительно ли это решило проблему? Потому что ... это невозможно сделать. – TigerhawkT3

-2

Вы используете Python 2.x или 3.x? Если 2.x:

Python 2 встроенных input() функция будет пытаться интерпретировать введенную строку в качестве кода Python: https://docs.python.org/2/library/functions.html#input

Так что, если вы вводите его естественный язык будет, очевидно, вызывают недопустимые ошибки синтаксиса.

Используйте вместо этого raw_input().

+0

Downvoters, я уверен, что мой ответ правильный, поэтому, пожалуйста, объясните, почему вы думаете иначе ... – Guillaume

+1

input() не интерпретируется как код Python. eval() и exec(). –

+0

У меня такое ощущение, что OP ошибочно ответил на вопрос и не использует версию Python, которую, по их мнению, они используют. – TigerhawkT3