google app engine python rot13

0 MFK34 [2017-08-14 14:24:00]

У меня возникли трудности с попыткой выяснить, что не так с моим кодом, я пытаюсь сделать программу rot13, используя python и движок Google. Я пытался выяснить, в чем проблема, но я не могу, мой код работает нормально до получения значения из текстового поля, но когда я передаю его функции rot13, это дает мне ошибку 500, спасибо заранее

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)

google-app-engine python-3.x


1 ответ


1 snakecharmerb [2017-08-14 14:32:00]

Проблема в этой строке:

>>> 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 - это атрибут string модуля, а не отдельных экземпляров строк.

Вам нужно импортировать string модуль (import string) и изменить свой код на:

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

Альтернативным подходом было бы использовать встроенную кодировку rot-13:

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