我的小程序从用户输入中获取一个字符串,并在每个字母之间添加点,然后删除这些点。
函数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
的值,但我不确定为什么?有人能给点建议吗?由于
这是因为您的add_dots
和remove_dots
函数实际上没有返回任何东西,它们只是打印值。因此,将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)))
你的函数没有返回任何东西。另外,不存储str.replace(".", "")
的输出。这应该可以工作。
def add_dots(str):
return ".".join(str)
def remove_dots(str):
return str.replace(".", "")
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对您的帖子的评论
当你在函数中返回时,你必须转换为其他数据类型,如列表,字符串。在本例中,第一个函数应该是
def add_dots(string):
string = ".".join(string)
print(string)
return str(string)
第二个函数应该是
def remove_dots(string):
string = string.replace(".", "")
print(string)
return str(string)
因为任何从函数返回的东西,它返回" nontype "为默认。和Nonetype no method__getitem__
裁判:https://www.pythonpool.com/typeerror-nonetype-object-is-not-subscriptable/