2016-02-09 43 views
-1
import sys 
import string 
import re 
keywords = [] 
task = "*" 
while task not in "ed": 
    task = raw_input("Encrypt or Decrypt: \nType ‘e’ to Encrypt\nType ‘d’ to Decrypt\n").lower() 
keyword = "*" 
keyphrase = "*" 
while not(re.match('[a-z ]+$',keyword)): 
    keyword = raw_input("enter your first keyword:-").lower() 
while not(re.match('[a-z ]+$',keyphrase)): 
    keyphrase = raw_input("enter a key phrase:-").lower() 

loop = 0 
repeated_keyword = "" 
if len(keyword) < len(keyphrase): 
    while len(repeated_keyword) < len(keyphrase): 
     repeated_keyword = repeated_keyword + keyword[loop] 
     loop += 1 
     if loop >= len(keyword): 
      loop = 0 
elif len(keyword) == len(keyphrase): 
    repeated_keyword = keyword 
    last_charecter_in_keyword = keyword[-1] 
elif len(keyword) > len(keyphrase): 
    repeated_keyword = keyword 
    last_charecter_in_keyword = keyword[-1] 
    while len(repeated_keyword) > len(keyphrase): 
     repeated_keyword = repeated_keyword[:-1]  

repeated_keyword_letter_positions = [] 
keyphrase_letter_positions = [] 
for character in repeated_keyword: 
    position_of_char_in_repeated_keyword = (string.ascii_lowercase + " ").find(character) +1 
    repeated_keyword_letter_positions.append(position_of_char_in_repeated_keyword) 
for character in keyphrase: 
    position_of_char_in_keyphrase = (string.ascii_lowercase + " ").find(character) 
    keyphrase_letter_positions.append(position_of_char_in_keyphrase) 

if task == "e": 
    final_positions_of_letters = [a + b for a, b in zip(keyphrase_letter_positions,repeated_keyword_letter_positions)] 
elif task == "d": 
    final_positions_of_letters = [a - b for a, b in zip(keyphrase_letter_positions,repeated_keyword_letter_positions)] 
new_letter = "" 

final_cipher = [] 
loop = 0 
alphabet = string.ascii_lowercase + " " + string.ascii_lowercase + " " 
while loop < len(final_positions_of_letters): 
    new_letter =alphabet[final_positions_of_letters[loop]] 
    final_cipher = str(final_cipher) + str(new_letter) 
    loop += 1 
print final_cipher 

这是python 2.7中的加密/解密程序。然而,在该节目结束时的final_cipher列表被打印到外壳的一对括号[]被印刷之前的列表的内容列表打印python中的方括号2.7

回答

1

你在这里的一些选项:

•循环通过阵列,并在不带分隔符的情况下在同一行上打印每个元素。

•使用“连接”将数组的所有部分连接在一个字符串中。你可以找到关于加入声明here的更多信息。

我个人认为'加入'是最好的选择。

0

final_cipher是一个列表,是的,打印它将打印它作为一个字符串,即调用str(final_cipher)的结果。

如果你只想打印由逗号分隔的元素,你可以使用。加入:

print ", ".join(final_cipher) 
1

我猜你正在试图输出字符串。你通过将初始声明设置为空列表而犯了一个错误。

为了解决这个只需使用:的

final_cipher = ""代替final_cipher = []

这应该让你在字符串格式输出。

1

错过:

final_cipher = [] 
loop = 0 
alphabet = string.ascii_lowercase + " " + string.ascii_lowercase + " " 
while loop < len(final_positions_of_letters): 
    new_letter =alphabet[final_positions_of_letters[loop]] 
    final_cipher = str(final_cipher) + str(new_letter) 
    loop += 1 
print final_cipher 

我看到你与final_cipher就像是一个字符串,那么你应该初始化,如:

final_cipher = "" 

和:

final_cipher = str(final_cipher) + str(new_letter) 

应该是:

final_cipher = final_cipher + str(new_letter) 

或者更好:

final_cipher += str(new_letter) 
0

创建final_cipher的名单,但之后又改变了主意,做字符串连接来代替。在循环的第一次迭代中,str(final_cipher)创建空列表"[]"的字符串表示形式。看起来熟悉?保留一个列表并在最后建立字符串。

final_cipher = [] 
loop = 0 
alphabet = string.ascii_lowercase + " " + string.ascii_lowercase + " " 
while loop < len(final_positions_of_letters): 
    new_letter =alphabet[final_positions_of_letters[loop]] 
    final_cipher.append(str(new_letter)) 
    loop += 1 
final_cipher = ''.join(final_cipher) 
print final_cipher