2017-06-08 2 views
1

文字列のrot13コードを出力するために次のコードを記述しました。 Rot13コードは、文字列の文字を13か所分シフトします。しかし何らかの理由で、印刷されたテキストボックスは常に空白です。誰かがこのコードで私を助けてくれますか?Web開発者のためのpythonプログラムの最終出力を取得していません

を使用でき
import os 
import webapp2 
import jinja2 
import cgi 
import string 

template_dir= os.path.join(os.path.dirname(__file__), 'templates') 
jinja_env= jinja2.Environment(loader= jinja2.FileSystemLoader(template_dir), 
                     autoescape= True) # automatically escapes all the variables 


form=""" 
<form method="post"> 
     <textarea name="text" style="height: 100px; width: 400px;">%(val)s</textarea> 
     <br> 
     <input type="submit"> 
    </form> 
""" 

class Handler(webapp2.RequestHandler): 
    def write(self,*a,**kw): 
     self.response.out.write(*a,**kw) 

    def render_str(self,template,**params): 
     #Causes Jinja to load that file creating jinja template 
     t=jinja_env.get_template(template) 
     return t.render(params) 

    def render(self,template,**kw): 
     self.write(self.render_str(template,**kw)) 



class MainPage(webapp2.RequestHandler): 

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

    def write_form(self, s=''): 
     self.response.out.write(form % {"val":s}) 

    def get(self): 
     self.write_form() 

    def rot13(self, s): 
     out="" 
     str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 
     str2 = "NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm" 
     for c in s: 
      if c in str1: 
       k = str1.index(c) 
       out += string.replace(s,c, str2[k]) 
      else: 
       out += c 
     return out 

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


     self.write_form(user_text) 


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

答えて

0

import codecs 

してからPOSTにあなたが使用してrot_13に直接文字列を変換することができます:ここで

text = codecs.encode(user_text, 'rot_13') 

コード変更:

import os 
import webapp2 
import jinja2 
import cgi 
import string 
import codecs 

template_dir= os.path.join(os.path.dirname(__file__), 'templates') 
jinja_env= jinja2.Environment(loader= 
jinja2.FileSystemLoader(template_dir), 

autoescape= True) # automatically escapes all the variables 


form=""" 
<form method="post"> 
    <textarea name="text" style="height: 100px; width: 400px;">% 
    (val)s</textarea> 
    <br> 
    <input type="submit"> 
</form> 
""" 

class Handler(webapp2.RequestHandler): 
    def write(self,*a,**kw): 
     self.response.out.write(*a,**kw) 

    def render_str(self,template,**params): 
     #Causes Jinja to load that file creating jinja template 
     t=jinja_env.get_template(template) 
     return t.render(params) 

    def render(self,template,**kw): 
     self.write(self.render_str(template,**kw)) 

class MainPage(webapp2.RequestHandler): 

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

    def write_form(self, s=''): 
     self.response.out.write(form % {"val":s}) 

    def get(self): 
     self.write_form() 

def post(self): 
    user_text = self.request.get('text') 
    text = codecs.encode(user_text, 'rot_13') 
    self.write_form(text) 


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

ここで結果はa

enter image description here

編集:アプリの作業とnimation あなたのルーチンを使用したい場合:

def rot13(self, s): 
    out = "" 
    str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 
    str2 = "NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm" 
    for c in s: 
     if c in str1: 
      k = str1.index(c) 
      #out += string.replace(s, c, str2[k]) 
      out += str2[k] 
     else: 
      out += c 
    return out 
+0

どうもありがとうございました。これが私の仕事でした。しかし、自分のコードに何が間違っているのか理解できませんでした。あなたもそれで私を助けてくれますか? –

+0

あなたのルーチンを使用したい場合は、@Taylorを確認してください。問題はout + = string.replace(s、c、str2 [k])です。 + = str2 [k]の変換を連結する必要があります。必要に応じて、コードに変更を加えることができます。 –

+0

ありがとう@ニコラス!これは本当にとても役に立ちました! –

関連する問題