2014-07-08 65 views
0

我:与子分配蟒蛇错误

LETTERS = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] 
results = ['BAN', 'ANA', 'PEE', 'L'] 
length = len(LETTERS) 

for segment in results: 
    # get the numerical position of the character 
    first_char = LETTERS.index(segment[0]) 
    # get the shift number 
    first_char = (first_char + 0) % length 
    #first character shift 
    segment[0] = LETTERS[first_char] 

我如下得到一个错误:

segment[0] = LETTERS[first_char] 
TypeError: 'str' object does not support item assignment 

如果我修改这个程序,使得它不是一个for循环它的工作原理,但在循环是我得到消息的地方。这是为什么?

+0

字符串是不可改变的。你不能改变它中的一个角色。 – Santa

回答

0

您正在使用foreach种循环。

for segment in results:

段是在数组中的项目,你不能索引(像你一样segment[0])。

0

字符串是不可变的,所以你不能分配给索引。

您可以创建这样

segment = LETTERS[first_char] + segment[1:] 

一个新的字符串,但不会取代结果的值。要做到这一点,你需要枚举

for i, segment in enumerate(results): 
    ... 
    result[i] = LETTERS[first_char] + segment[1:] 
0

而是改变(immutable)的字符串,你需要创建一个新的字符串和替换旧:

LETTERS = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] 
results = ['BAN', 'ANA', 'PEE', 'L'] 
length = len(LETTERS) 

for i in range(len(results)): 
    # get the numerical position of the character 
    first_char = LETTERS.index(results[i][0]) 
    # get the shift number 
    first_char = (first_char + 0) % length 
    #first character shift 
    results[i] = LETTERS[first_char] + results[i][1:] 
+0

结果[i] = LETTERS [first_char] + results [i] [1:]' –

+0

结果[i] [0] =字母[first_char] +结果[i] [1:]'to访问第一个字符而不仅仅是“BAN”中的第一个项目? –

+0

不,您想访问第一个项目。就像我(和其他答复者)所说的那样,你不能只访问第一个字符。此方法将为列表中的该索引分配一个新的字符串。 –