2014-07-22 22 views
-2

錯誤:「STR」對象不支持項目分配蟒錯誤:「STR」對象不支持項目分配蟒

dict=['A', 'a','B', 'b','C', 'c','D', 'd','E', 'e','F', 'f','G', 'g','H', 'h','I',  'i','J', 'j','K', 'k','L', 'l','M', 'm','N', 'n','P', 'o','P', 'p','Q', 'q','R', 'r','S',     's','T', 't','U', 'u','V', 'v','W', 'w','X', 'x','Y', 'y','Z' 'z'] 

def cript(s): 
    for i in range(0,len(s)): 
     a=dict.index(s[i]) 
     if a<26: 
      s[i]=dict[a+26] 
     else: 
      s[i]=dict[a-26] 
    return s 

print cript('Hello') 

錯誤線6

s[i]= dict[a+26] 
TypeError: 'str' object does not support item assignment python 
+0

這正是它所說的。您不允許在Python中更改字符串中的字符。 – TheSoundDefense

+2

這與您的問題無關,但重用其他對象的內置名稱是一個非常糟糕的主意。在你的代碼中,'dict'是一個列表實例,當你試圖創建一個實際的字典時,將來可能會非常困惑。 – Blckknght

回答

4

Python沒有讓你換出的字符在另一個字符串;字符串是不可變的。你需要做的是創建一個完全不同的字符串,然後返回。

dict=['A', 'a','B', 'b','C', 'c','D', 'd','E', 'e','F', 'f','G', 'g','H', 'h','I', 'i','J', 'j','K', 'k','L', 'l','M', 'm','N', 'n','P', 'o','P', 'p','Q', 'q','R', 'r','S', 's','T', 't','U', 'u','V', 'v','W', 'w','X', 'x','Y', 'y','Z' 'z'] 

def cript(s): 
    crypt_s = "" 
    for i in range(0,len(s)): 
     a=dict.index(s[i]) 
     if a<26: 
      crypt_s += dict[a+26] 
     else: 
      crypt_s += dict[a-26] 
    return crypt_s 

print cript('Hello') 

當然,代碼可能還有其他問題,但是這會解決特定的錯誤消息。

+0

謝謝!有用! – user3510057

2

字符串是不可變的對象,意義他們不能被修改(你必須返回一個新的字符串並重新分配它)。

s[i] = dict[a + 26] 

試圖串

在這裏,在重新分配的值是一個更容易看到例如

>>> astring = "Hello" 
>>> astring[0] = "a" 

Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    astring[0] = "a" 
TypeError: 'str' object does not support item assignment 
0
def game(): 
    list = ["pomme", "anniversaire", "table", "travail", "amies", "enfants"] 
    ran = random.randint(0, (len(list)-1)/2) 
    mot = list[ran] 
    length = len(mot) 
    for x in range(0, length-1): 
     if length % 2 ==0: 
      a = int(random.randint(-length/2, length/2)) 
     else: 
      a = int(random.randint(-(length-1)/2, (length-1)/2)) 
     mot[x] = mot[x+a] 
相關問題