.replace代码为什么不起作用,可能是带有def函数的东西

时间:2019-05-14 16:54:13

标签: python str-replace

因此,我正在尝试制作一个秘密代码制作者,并且正在使用replace函数更改字母。现在,当我这样写一行时:

x = 'example'
print(x.replace('e', 'f'))

效果很好,但是我不想打印多行(例如,我正在整个字母):

x = 'example'
print(x.replace('e', 'f'))
print(x.replace('x', 'e'))

那样。我不想有多行,我希望它成一行。

我已经尝试使用def函数来解决这个问题,但是我对此感到困惑,并且绝对无法解决。这是我所拥有的:

> message = 'abc'

> def replacer(message):
>>    message.replace("a", "!")
>>    message.replace("b", '1')
>>    message.replace('c', '@')
>>    message.replace('d', '2')

> print(replacer.message)

我希望它将abc输出为!1 @,但我得到的只是一个错误,这里是

Traceback (most recent call last):
  File "main.py", line 8, in <module>
    print(replacer.message)
AttributeError: 'function' object has no attribute 'message'

4 个答案:

答案 0 :(得分:2)

您应该开始将结果分配给变量,并且在定义函数(使用def)时,还应该返回一些值。像这样:

message = 'abc'

def replacer(message):
  message = message.replace("a", "!")
  message = message.replace("b", '1')
  message = message.replace('c', '@')
  message = message.replace('d', '2')
  return message

print(replacer(message))

这将打印所需的!1@输出。

答案 1 :(得分:1)

replace方法无法就地运行。这意味着调用它不会修改对象。这是您不能做的,因为string对象是不可变的。

您需要执行message = message.replace("a", "!"),而不仅仅是message.replace("a", "!")

您的函数还需要return message,然后您可以通过编写print(replacer(message))(而不是print(replacer.message))来看到它。

答案 2 :(得分:1)

.replace()在没有重新分配的情况下不起作用,因为正如其他人所指出的那样,字符串是不可变的。最好将.replace()视为一个函数,它返回更改后的字符串,然后需要将其捕获为变量,而不是可用于字符串对象的方法。例如:

message = "Hello there!"
message.replace("H", "F")
print(message)

收益:

  

“你好!”

无替代品。为避免这种情况,您需要重新分配变量,例如:

message = "Hello there!"
message = message.replace("H", "F") # reassign variable
print(message)

满足期望:

  

“你好!”

接下来,replacer没有属性.message,但是它是一个参数,需要一个输入变量,它将分配给 local变量 message(这掩盖了全局变量message,可能会导致部分混乱。通常,本地和全局命名空间应该不同!)

最后,您的函数没有return任何东西。建议您查看return statements来了解此功能。

因此,功能脚本如下所示:

message = 'abc'

def replacer(input_message): # different namespace for local variable
    input_message = input_message.replace("a", "!") #reassign output
    input_message = input_message.replace("b", '1') #reassign output
    input_message = input_message.replace('c', '@') #reassign output
    input_message = input_message.replace('d', '2') #reassign output
    return input_message # make the function give you something useful back

print(replacer(message)) # give the function an input instead of trying to access a method/attribute of it

运行此更新的脚本会产生更合适的结果:

  

“!1 @”

答案 3 :(得分:-2)

尝试

print(replacer(message))

这应该有效

消息是替换功能的参数。

您还需要

return message

在您的功能中