Vigenere 密码语法错误
Posted
技术标签:
【中文标题】Vigenere 密码语法错误【英文标题】:Vigenere Cipher syntax errors 【发布时间】:2018-08-31 14:56:29 【问题描述】:我应该做一个这样的程序:
$Python
vigenere.py
Type a message:
The crow flies at midnight!
Encryption key:
boom
Uvs fsck rmwse bh auebwsih!
使用 Vigenere 密码
我将使用一个辅助函数并将其导入到这个函数中,我知道这是可行的
import string
alphabet_pos = "abcdefghijklmnopqrstuvwxyz"
def alphabet_position(letter):
pos = alphabet_pos.index(letter.lower())
return pos
def rotate(letter, rot):
pos = alphabet_position(letter)
new_pos = (pos + rot) % 26
new_char = alphabet_pos[new_pos]
return new_char
之后我开始加密它的 Vigenere 部分
from helpers import alphabet_position, rotate
from caesar import encrypt
def encrypt(text,key):
#Declare variable
cipher = ''
#Compute length
l = len(key)
#Assign value
idx = 0
#Loop
for i in text:
#if condition satisfies
if i.isalpha():
#Call method
cipher += rotate_character(i,alphabet_position(key[idx]))
#Update to next
idx = (idx+1)%1
#Otherwise
else:
#Increment
cipher += i
#Return
return cipher
#Define main
def main():
当我运行它时,它会要求我输入一条消息,但返回说在第 51 行有语法错误,在 <module> main(
) 和
第 38 行,在
main text = input("Type a message: /n"))
File "<string>", line 1
【问题讨论】:
您的输入中似乎多了一个"
语法高亮,就像这里使用的 Stack Overflow 一样,可以使这些类型的问题更加明显。在至少提供该功能的编辑器中工作(大多数都提供)可能是一个好主意。
这可能是因为您使用的是 Python 2,其中input
获取用户的输入并尝试评估它,就好像它是 Python 代码一样。如果不是,您将收到语法错误。您几乎不想使用该功能;使用raw_input
(或升级到不存在该问题的Python 3)。
附带说明,如果您键入不是 ASCII 字母的字母,例如 é
或 å
,此代码可能会失败。在 Python 2 中,您可能会侥幸逃脱。在 Python 3 中,所有文本始终为 Unicode,isalpha
对于这些字母将是正确的,但它们在 ASCII 字母列表中的索引不是很有帮助。因此,您可能需要像 if i.lower() in alphabet_pos
这样的显式检查,或者可能不提前检查,而只是在 rotate
中编写处理 index
的代码,而 return letter
失败。
【参考方案1】:
不知道你为什么使用 main text = ...
INSTEAD 而不是 text = ...
或 main_text = ...
并且看起来你最后还有一个额外的括号......
所以,
如果您想从用户那里获取一个字符串并将其存储在一个变量text
中,您应该像这样重写您的语句:
如果您使用的是 Python3:
text = input("Type a message: ")
如果您使用的是 Python2:
text = raw_input("Type a message: ")
下次询问时请说明您使用的python版本,以便我们更容易回答:)
(你可以用import sys; print(sys.version)
查看你运行的版本)
【讨论】:
以上是关于Vigenere 密码语法错误的主要内容,如果未能解决你的问题,请参考以下文章