2017-08-14 12 views
0

Ich habe Schwierigkeiten, herauszufinden, was ist falsch mit meinem Code, ich versuche, ein rot13 Programm mit Python und Google App-Engine zu machen. Ich habe versucht, herauszufinden, was das Problem ist, aber ich kann nicht, mein Code funktioniert gut, bis der Wert aus dem Textfeld, aber wenn ich es an die rot13 Funktion übergeben gibt es mir einen Fehler 500, Vielen Dank im VorausGoogle App Engine Python rot13

import webapp2 
import cgi 
form = """<form method="post"> 
    <textarea name="text" style="height: 100px; width: 400px;"></textarea> 
    <br> 
    <br> 
    <input type="submit"/> 
    </form>""" 

def escape_html(s): 
    return cgi.escape(s, quote=True) 

def rot13(s): 
    regular = "abcdefghijklmnopqrstuvwxyz" 
    ciper13 = "nopqrstuvwxyzabcdefghijklm" 
    s = s.translate(s.maketrans(regular, ciper13)) 
    return s 

class MainHandler(webapp2.RequestHandler): 
    def write_form(self): 
     self.response.write(form) 

    def get(self): 
     #self.response.headers['Content-Type'] = 'text/plain' 
     self.write_form() 

    def post(self): 
     text = self.request.get('text') 
     text = escape_html(text) 
     text = rot13(text) 
     self.response.write(text) 

app = webapp2.WSGIApplication([('/', MainHandler)], debug=True) 

Antwort

1

Das Problem ist in dieser Zeile:

>>> s = s.translate(s.maketrans(regular, ciper13)) 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'str' object has no attribute 'maketrans' 

maketrans ist ein Attribut des stringModul, nicht von einzelnen String-Instanzen.

Sie benötigen das string Modul (import string) importieren und Ihren Code ändern:

>>> s = s.translate(string.maketrans(regular, ciper13)) 

Ein alternativer Ansatz die in rot-13-Codierung gebaut zu verwenden wäre:

>>> s = u'foo' 
>>> s.encode('rot-13') 
'sbb'