当我尝试为“encoded.append(“i”)”行运行此代码时,我不断收到此错误:
AttributeError:“str”对象没有属性“append”
我无法弄清楚为什么列表不会附加字符串。我确定问题很简单谢谢您的帮助。
def encode(code, msg):
'''Encrypts a message, msg, using the substitutions defined in the
dictionary, code'''
msg = list(msg)
encoded = []
for i in msg:
if i in code.keys():
i = code[i]
encoded.append(i)
else:
encoded.append(i)
encoded = ''.join(encoded)
return encoded
您可以在此处将编码设置为字符串:
encoded = ''.join(encoded)
当然它没有属性“append”。
由于您在一个循环迭代中执行此操作,因此在下一次迭代中您将使用 str 而不是列表...
>>> encoded =["d","4"]
>>> encoded="".join(encoded)
>>> print (type(encoded))
<class 'str'> #It's not a list anymore, you converted it to string.
>>> encoded =["d","4",4] # 4 here as integer
>>> encoded="".join(encoded)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
encoded="".join(encoded)
TypeError: sequence item 2: expected str instance, int found
>>>
如您所见,您的列表在此处转换为字符串
"".join(encoded)
。并且 append
是列表的方法,而不是字符串。这就是你收到该错误的原因。另外,正如您所看到的,如果您的 encoded
列表有一个整数元素,您将看到 TypeError
,因为您不能对整数使用 join
方法。最好再次检查所有代码。
您的字符串转换行位于
else
子句下。将其从条件和 for 循环中取出,使其成为 encoded
的最后一件事。就目前情况而言,您将在 for
循环的中途转换为字符串:
def encode(code, msg):
'''Encrypts a message, msg, using the substitutions defined in the
dictionary, code'''
msg = list(msg)
encoded = []
for i in msg:
if i in code.keys():
i = code[i]
encoded.append(i)
else:
encoded.append(i)
# after all appends and outside for loop
encoded = ''.join(encoded)
return encoded
由于 else 语句中的第二个表达式,您收到错误。
''.join(encoded) returns a string that gets assigned to encoded
如此编码的现在是字符串类型。 在第二个循环中,if/else 语句中有 .append(i) 方法,该方法只能应用于列表而不是字符串。
你的 .join() 方法应该出现在 for 循环之后,就在你返回它之前。
如果以上文字显示不正确,我深表歉意。这是我的第一篇文章,我仍在尝试弄清楚它是如何工作的。
显然你不能追加仅适用于List,并且不适用于str。要在字符串最后添加任何内容,您只需将其与原始字符串连接起来即可。