因此,我正在尝试制作一个秘密代码制作者,并且正在使用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'
答案 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
在您的功能中