#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 также хотел заменить внутренние пробелы (сначала у меня было то же самое, ха-ха)