Не удается присвоить значение переменной в определенной функции

#python #python-3.x #string #function #replace

#python #python-3.x #строка #функция #заменить

Вопрос:

Я пытаюсь определить функцию, которая удаляет пробелы и дефисы из строки, например, для редактирования foo - bar foobar .

Исходная строка должна храниться в именованной переменной (например orig_str ), а измененная строка возвращается под новым именем переменной (например amended_str ).

Моя попытка определить такую функцию вообще ничего не дает.

 #This is what my function looks like

def normalise_str(old_string, new_string):          #def func
    temp_string = old_string.replace(" ", "")       #rm whitespace
    temp_string = temp_string.replace("-", "")      #rm hyphens
    new_string = temp_string                        #assign newly modified str to var

#This is what I would like to achieve

orig_str = "foo - bar"
normalise_str = (orig_str, amended_str)
print(amended_str) #I would like this to return "foobar"
  

Я бы определенно оценил более эффективное решение в соответствии с…

 amended_str = orig_str.replace(" " and "-", "") #I'm sure something sensible like this exists
  

Однако мне нужно понять, что я делаю не так с моей функцией, чтобы продвинуть свое обучение.

Ответ №1:

Ваша текущая версия завершается с ошибкой, поскольку строки не могут быть изменены после создания (см. Примечание); вместо этого выполните следующие действия:

 amended_str = normalize_str(orig_str)
  

Сокращенная версия того, что вы хотите, это:

 def normalize_str(in_str):
    return in_str.replace(' ', '').replace('-', '')

# Or
normalize_str = lambda s: s.replace(' ', '').replace('-', '')
  

Примечание: вы не можете изменить строку, переданную в качестве аргумента, потому что строки неизменяемы — это означает, что после создания они не могут быть изменены.

Ответ №2:

Вам нужно ввести старую строку, внести изменения, а затем вернуть конечную временную строку обратно в переменную.

 #This is what my function looks like

def normalise_str(old_string):          #def func
    temp_string = old_string.replace(" ", "")       #rm whitespace
    temp_string = temp_string.replace("-", "")      #rm hyphens
    return temp_string                     #assign newly modified str to var

#This is what I would like to achieve

orig_str = "foo - bar"
s = normalise_str(orig_str)
print(s) #I would like this to return "foobar"
  

Ответ №3:

Строки являются неизменяемыми объектами, что означает в Python, что исходная строка вне функции не может быть изменена. Поэтому вам необходимо явно вернуть измененную строку.

 def normalise_str(old_string):          
    return old_str.replace(' ','').replace('-', '')

orig_str = "foo - bar"
amended_str = normalise_str(old_string)
print(amended_str) # Should print foobar
  

Комментарии:

1. OP также хотел заменить внутренние пробелы (сначала у меня было то же самое, ха-ха)