交互式 Sage 单元格的语法错误

Syntax errors with interactive Sage cell

我正在尝试创建一个网页,该网页使用交互式 Sage 单元格在用户输入的字符串上实施 Vigenere 密码。当我 运行 在交互式单元格之外时,代码 运行 非常完美。见下文:

message = 'Beware the Jabberwock, my son!'
key = 'VIGENERECIPHER'
from itertools import starmap, cycle                                                           
def encrypt(message, key):                                                                                                                           
    message = filter(lambda _: _.isalpha(), message.upper())                                                                                                   
    def enc(c,k): return chr(((ord(k) + ord(c)) % 26) + ord('A'))
        return "".join(starmap(enc, zip(message, cycle(key))))   
encr = encrypt(message, key)       
print encr      

但是当我尝试在交互式单元格中实现它时,出现语法错误。

@interact
def f(message = input_box('Beware the Jabberwock, my son!', label ="Plain text"), key = input_box('VIGENERECIPHER', label = "Key word")):
    from itertools import starmap, cycle                                                           
    def encrypt(message, key):                                                                                                                           
        message = filter(lambda _: _.isalpha(), message.upper())                                                                                                   
        def enc(c,k): return chr(((ord(k) + ord(c)) % 26) + ord('A'))                              
        return "".join(starmap(enc, zip(message, cycle(key))))   
    encr = encrypt(message, key)       
    print encr  

打印出以下错误:

AttributeError: 'exceptions.SyntaxError' object has no attribute 'upper'

我是 python/sage 的新手...我猜这是 class/type 的某种错误?我试过谷歌搜索,但找不到与此问题具体相关的任何内容。谢谢

我没有看到这个 AttributeError,而是另一个错误。也许这是同一件事的征兆。无论如何,问题是 message=input_box(...) 期望框中有一个 Python 表达式。您应该添加一个 type 关键字:

message=input_box('Beware the Jabberwock, my son!', label ="Plain text", type=str)

(或者,您可以在输入框中输入所有带显式引号的字符串。)