Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这个webapp2代码有什么问题?_Python_String_Google App Engine_Webapp2 - Fatal编程技术网

Python 这个webapp2代码有什么问题?

Python 这个webapp2代码有什么问题?,python,string,google-app-engine,webapp2,Python,String,Google App Engine,Webapp2,我正在用python编写一个Web应用程序,通过rot13转换字符串,例如rot13(a)=n,rot13(b)=o等等。但该代码仅适用于m之后的字母。从字母a到m没有变化。我做错了什么,这是我的代码: import webapp2 import cgi form = """<form method="post"> Type a string to convert: <br> <textarea name="text">%(text)

我正在用python编写一个Web应用程序,通过rot13转换字符串,例如rot13(a)=n,rot13(b)=o等等。但该代码仅适用于m之后的字母。从字母a到m没有变化。我做错了什么,这是我的代码:

import webapp2
import cgi

form = """<form method="post">
    Type a string to convert:
    <br>
    <textarea name="text">%(text)s</textarea>
    <br>
    <input type="submit">
</form> """

class MainHandler(webapp2.RequestHandler):
    def write_form(self, text=""):
        self.response.out.write(form % {"text": cgi.escape(text)})

    def get(self):
        self.write_form()

    def post(self):
        new_text = self.request.get('text')
        text = ""
        for x in range(len(new_text)):
            text += convert(new_text[x])
        self.write_form(text)

def convert(t):
    for (i, o) in (('a', 'n'),
                   ('b', 'o'),
                   ('c', 'p'),
                   ('d', 'q'),
                   ('e', 'r'),
                   ('f', 's'),
                   ('g', 't'),
                   ('h', 'u'),
                   ('i', 'v'),
                   ('j', 'w'),
                   ('k', 'x'),
                   ('l', 'y'),
                   ('m', 'z'),
                   ('n', 'a'),
                   ('o', 'b'),
                   ('p', 'c'),
                   ('q', 'd'),
                   ('r', 'e'),
                   ('s', 'f'),
                   ('t', 'g'),
                   ('u', 'h'),
                   ('v', 'i'),
                   ('w', 'j'),
                   ('x', 'k'),
                   ('y', 'l'),
                   ('z', 'm')):
        t = t.replace(i, o) 
    return t


app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)
导入webapp2
导入cgi
form=”“”
键入要转换的字符串:

%(文本)s
""" 类MainHandler(webapp2.RequestHandler): def write_form(self,text=”“): self.response.out.write(格式%{“text”:cgi.escape(text)}) def get(自我): self.write_form() def post(自我): new_text=self.request.get('text')) text=“” 对于范围内的x(len(新文本)): 文本+=转换(新文本[x]) 自写表格(文本) def转换(t): 对于(('a','n')中的(i,o), (‘b’、‘o’), ('c','p'), ('d','q'), ('e','r'), (‘f’、‘s’), ('g','t'), ('h','u'), (‘i’、‘v’), ('j','w'), ('k','x'), ('l','y'), ('m','z'), ('n','a'), ('o','b'), ('p','c'), ('q','d'), ('r','e'), (‘s’、‘f’), ('t','g'), ('u','h'), (‘v’、‘i’), ('w','j'), ('x','k'), ('y','l'), ('z','m')): t=t.更换(i,o) 返回t app=webapp2.WSGIApplication([ (“/”,MainHandler) ],debug=True)

当我把字母n到z放在a上面时,a到m给出了正确的结果。

问题在于
convert()
方法,让我们举一个简单的例子来理解这一点

让我们以字符串
'an'
为例,尝试转换它

首先,我们从tuple的tuple中得到
a
,并在字符串中用
n
替换它,因此它变成了-
'nn'
。现在,在大量遗漏之后,我们在元组的元组中找到了
n
,我们再次替换整个字符串,这次我们得到了-
'aa'
。正如您所看到的,我们再次替换完整字符串,而不仅仅是未转换字符串的剩余部分。这是代码中的基本问题(至少是您提到的问题)

为了解决这个问题,Python已经提供了一个
str.translate()
(带有
str.maketrans
)函数来执行您试图执行的操作,您应该改用它。范例-

Python2.x-

def convert(t):
    from string import maketrans
    tt = maketrans('abcdefghijklmnopqrstuvwxyz','nopqrstuvwxyzabcdefghijklm')
    t = t.translate(tt)
    return t

对于Python3.x,您应该使用
str.maketrans()
而不是
string.maketrans()

,但是它给出了TypeError,所以我必须这样做:返回str(t).translate(tt)