当我尝试为该行运行此代码时,我一直收到此错误" encoded.append(" i")":
属性错误:' str'对象没有属性'追加'
我无法弄清楚为什么列表不会附加字符串。我确定问题很简单谢谢你的帮助。
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
答案 0 :(得分:3)
您在此处将编码设置为字符串:
encoded = ''.join(encoded)
当然,它没有属性'追加'。
由于您在循环迭代之一上执行此操作,因此在下一次迭代中您使用str而不是list ...
答案 1 :(得分:0)
您的字符串转换行位于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
答案 2 :(得分:0)
>>> 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
方法。最好再次检查所有代码。
答案 3 :(得分:0)
由于您在else语句中使用了第二个表达式,因此收到错误。
''.join(encoded) returns a string that gets assigned to encoded
因此编码现在是字符串类型。 在第二个循环中,if / else语句中的.append(i)方法只能应用于列表而不是字符串。
你的.join()方法应该在你返回之前出现在for循环之后。
如果上述文字看起来不正确,我会支持。这是我的第一篇文章,我仍然试图弄清楚它是如何工作的。