#python #python-3.x
#python #python-3.x
Вопрос:
Моя мини-программа берет строку из пользовательского ввода и добавляет точки между каждой буквой, а затем удаляет эти точки.
Функция add_dots
принимает строку и добавляет точки. У меня есть отдельная вызываемая функция remove_dots
, которая затем удаляет их.
Вот код ниже:
def add_dots(str):
str = ".".join(str)
print(str)
def remove_dots(str):
str.replace(".", "")
print(str)
word = input("Enter a word: ")
Когда я вызываю две функции по отдельности с
add_dots(word)
remove_dots(word)
Я получаю ожидаемый вывод консоли
Enter a word: hello
h.e.l.l.o
hello
Однако, когда я пытаюсь вызвать
remove_dots(add_dots(word))
Я получаю сообщение об ошибке AttributeError: 'NoneType' object has no attribute 'replace'
Я понимаю, что это означает str
, что переменная имеет значение None
, но я не уверен, почему? Может кто-нибудь посоветовать. Спасибо
Комментарии:
1. Потому что у вас
add_dots
ничего нетreturn
, или, точнее,return
ingNone
.2. «add_dots» ничего не
return
делает, он только печатает.3. «Я понимаю, что это означает, что переменная str имеет значение None, но я не уверен, почему?» Как вы думаете, какое значение оно должно иметь? Почему он должен иметь это значение? Как вы ожидаете, что программа вызовет это?
Ответ №1:
Это вызвано тем, что ваши add_dots
remove_dots
функции and на самом деле ничего не возвращают, они просто печатают значения. Таким образом, передача выходных add_dots
данных remove_dots
в приводит к None
передаче значения.
Также обратите внимание, что использование str
в качестве имени переменной, как правило, является плохой идеей; использование string
или более описательного имени — лучшая практика.
Измените свой код, чтобы возвращать измененные строки, например:
def add_dots(string):
string = ".".join(string)
return string
def remove_dots(string):
string = string.replace(".", "")
return string
word = input("Enter a word: ")
И распечатайте выходные данные следующим образом:
print(add_dots(word))
print(remove_dots(word))
print(remove_dots(add_dots(word)))
Ответ №2:
Ваши функции ничего не возвращают. Кроме того, выходные str.replace(".", "")
данные не сохраняются. Это должно сработать.
def add_dots(str):
return ".".join(str)
def remove_dots(str):
return str.replace(".", "")
Ответ №3:
def add_dots(str):
str = ".".join(str)
print(str)
return str
def remove_dots(str):
str = str.replace(".", "")
print(str)
return str
это должно исправить ваш код.
Смотрите Комментарии @Chris и @Michael Butscher к вашему сообщению
Комментарии:
1. remove_dots() вернет входную строку в вашем ответе.
2. Строки никогда не изменяются на месте, поэтому в вашем ответе его необходимо переназначить.