2014-11-02 39 views
0
alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
key = "XPMGTDHLYONZBWEARKJUFSCIQV" 

def encode(): 
    alpha[""] = key["x"] 

def decode(): 
    key[""] = alpha[""] 

def menu(): 
    response = raw_input("""Crypto Menu 
     quit(0) 
     encode(1) 
     decode(2)""") 
    return response 

def main(): 
    keepGoing = True 
    while keepGoing: 
    response = menu() 
    if response == "1": 
     plain = raw_input("text to be encoded: ") 
     print encode() 
    elif response == "2": 
     coded = raw_input("code to be decyphered: ") 
     print decode() 
    elif response == "0": 
     print "Thanks for doing secret spy stuff with me." 
     keepGoing = False 
    else: 
     print "I don't know what you want to do..." 

print main() 

我不斷收到TypeError說,字符串索引必須是整數,而不是類型。不知道如何解決這個問題,它突出瞭解碼和編碼變量。我得到一個typeError:字符串索引必須是整數,而不是類型

+0

對不起,第一次發佈在這裏,所以格式仍然很糟糕 – 2014-11-02 19:14:06

+0

歡迎在StackOverflow,你應該總是使用你正在使用的編程語言作爲標籤。人們傾向於使用特定標籤查找問題,如果您正確指定了標籤,則更有可能看到並回復帖子。 – 2014-11-02 19:24:31

+0

好吧謝謝,是沒有想到這個 – 2014-11-02 19:25:34

回答

0

這裏有很多事情要做,但你肯定有encodedecode函數的問題。如果我理解你想要做什麼,你可以重寫它們如下:

def encode(string): 
    alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
    key = 'XPMGTDHLYONZBWEARKJUFSCIQV' 
    encoded = [] 
    for character in string: 
     character_index = alpha.index(character) 
     encoded.append(key[character_index]) 
    return ''.join(encoded) 

def decode(string): 
    alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
    key = 'XPMGTDHLYONZBWEARKJUFSCIQV' 
    decoded = [] 
    for character in string: 
     character_index = key.index(character) 
     decoded.append(alpha[character_index]) 
    return ''.join(decoded) 

每個功能基本上是做同樣的事情(這裏是encode是這樣做的:

  1. 創建一個空列表所謂的編碼。我將通過傳遞的字符串中的字符使用這個存儲每個字符,翻譯,爲了。
  2. 循環。
  3. 在每次迭代,找到它的指數字符串alpha英寸
  4. 尋找在同一個指數key字符和字符添加到列表中encoded
  5. 一旦所有的文字都被翻譯,它們連接成一個字符串,並返回字符串。

注意:如果在alpha字符串中找不到string參數中的字符,則會失敗。你可以添加一些錯誤檢查。

如果您想允許使用不同的密鑰,那麼您可以更加通用。你可以寫一個translate功能是這樣的:

def translate(string, from_language_string, to_language_string): 
    translated = [] 
    for character in string: 
     character_index = from_language_string.index(character) 
     translated.append(to_language_string[character_index]) 
    return ''.join(translated) 

然後你encodedecode功能可以這樣寫:

def encode(string): 
    return translate(string, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'XPMGTDHLYONZBWEARKJUFSCIQV') 

def decode(string): 
    return translate(string, 'XPMGTDHLYONZBWEARKJUFSCIQV', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') 

爲了應對正在發生的事情在你的代碼的其餘部分,對於在您的main函數中,您只需確保將從raw_input中讀取的字符串傳遞給encodedecode函數(如果需要)。類似這樣的:

if response == '1': 
    plain = raw_input('text to be encoded: ') 
    print encode(plain) 
    # and so on 

祝你好運。

+0

它肯定會在一起,但是,在它來之前,我沒有使用character_index = alpha.index(字符)部分作爲子字符串找不到,我不知道爲什麼。有沒有機會解釋一下呢? – 2014-11-02 20:26:30

+0

你可以告訴我即將發生的情況嗎?基本上,這意味着在'alpha'中找不到'character'。可能是因爲它是小寫字母或其他。沒有看到它,這將是我的猜測。 – 2014-11-02 20:28:16

+0

當然,當我去運行程序時,它允許我選擇是編碼還是解碼,所以我選擇了選項1(編碼)。我輸入要編碼的單詞,麻煩,那就是當你顯示的部分的第6行出現錯誤時。它說沒有找到ValueError子串 – 2014-11-02 20:31:00

0

我覺得你的問題是在這裏:

alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
key = "XPMGTDHLYONZBWEARKJUFSCIQV" 

def encode(): 
    alpha[""] = key["x"] 

def decode(): 
    key[""] = alpha[""] 

我想你誤會索引中的字符串是如何工作的。因此,讓我試着糾正這一點:

取一個字符串,如x = "hello"。參考x["h"]是沒有意義的。 Python無法解釋這一點。另一方面,x[0]是有意義的。它返回索引0處的x的元素。這就是"h",就我們而言。

同樣,alpha[""]並不意味着什麼。當您使用方括號時,您試圖在字符串alpha中指定索引。但alpha的指數是整數。 alpha[0]返回"A"alpha[1]返回「B」。 alpha[25]返回「Z」。

所以你需要使用整數你的指數。象key["x"]這樣的記號並不意味着什麼,並且會引起錯誤。

+0

這絕對是讓我更容易理解,但我還不清楚應該把什麼放在方括號中。程序的想法是詢問用戶他們是否想編碼或解碼一組字母。該程序將使用alpha變量,然後轉移到關鍵變量中,反之亦然。所以我應該只是簡單地把alpha [0] = key [0]和解碼變量的相反?這會告訴計算機,每個字母代表兩個可變字符串在相同位置的字母?(alpha和鍵) – 2014-11-02 19:54:06

相關問題