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

时间:2016-03-28 15:12:56

标签: python interactive sage

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

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的新手...我猜这是类/类型的某种错误?我试过谷歌搜索,但我无法找到与此问题相关的任何内容。谢谢

1 个答案:

答案 0 :(得分:2)

我没有看到AttributeError,而是另一个错误。也许这是同一件事的同义词。在任何情况下,问题是message=input_box(...)期望在框中使用Python表达式。您应该添加type关键字:

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

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