为什么这个 .replace 代码不起作用,它可能与 def 函数有关
Why isn't this .replace code working, It may be something with def function
所以,我正在尝试制作一个密码生成器,我正在使用替换功能来更改字母。现在,当我这样写一行时:
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'
你应该开始将结果分配给一个变量,而且,当你定义一个函数(使用 def
)时,你应该 return 一些东西。像这样:
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@
输出。
replace
方法不起作用 in-place。这意味着 调用它不会修改对象。 这是你不能做的事情,因为 string
对象是不可变的。
您需要做 message = message.replace("a", "!")
而不仅仅是 message.replace("a", "!")
。
另外你的函数需要return message
,然后写print(replacer(message))
(不是print(replacer.message)
)就可以看到了。
.replace()
在没有重新分配的情况下不起作用,因为正如其他人所指出的那样,字符串是不可变的。最好将 .replace()
视为 returns 更改后的字符串的函数,然后需要将其捕获到变量中,而不是可用的方法字符串对象。例如:
message = "Hello there!"
message.replace("H", "F")
print(message)
产量:
"Hello there!"
没有替代品。为避免这种情况,您需要重新分配变量,例如:
message = "Hello there!"
message = message.replace("H", "F") # reassign variable
print(message)
产生预期的结果:
"Fello there!"
接下来,replacer
没有属性 .message
,但它是一个需要 输入变量 的参数,它将分配给 [=41] =]局部变量 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@"
所以,我正在尝试制作一个密码生成器,我正在使用替换功能来更改字母。现在,当我这样写一行时:
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'
你应该开始将结果分配给一个变量,而且,当你定义一个函数(使用 def
)时,你应该 return 一些东西。像这样:
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@
输出。
replace
方法不起作用 in-place。这意味着 调用它不会修改对象。 这是你不能做的事情,因为 string
对象是不可变的。
您需要做 message = message.replace("a", "!")
而不仅仅是 message.replace("a", "!")
。
另外你的函数需要return message
,然后写print(replacer(message))
(不是print(replacer.message)
)就可以看到了。
.replace()
在没有重新分配的情况下不起作用,因为正如其他人所指出的那样,字符串是不可变的。最好将 .replace()
视为 returns 更改后的字符串的函数,然后需要将其捕获到变量中,而不是可用的方法字符串对象。例如:
message = "Hello there!"
message.replace("H", "F")
print(message)
产量:
"Hello there!"
没有替代品。为避免这种情况,您需要重新分配变量,例如:
message = "Hello there!"
message = message.replace("H", "F") # reassign variable
print(message)
产生预期的结果:
"Fello there!"
接下来,replacer
没有属性 .message
,但它是一个需要 输入变量 的参数,它将分配给 [=41] =]局部变量 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@"