2012-04-28 10 views
19

Lütfen, birisini kodla bana yardım edebilir misiniz? Onu çalıştırdığınızda günlükleri ki: Bu python kodunda "TypeError karakter eşlemesi tam sayı döndürmelidir ..." ne üretiyor?

return method(*args, **kwargs) 
    File "C:\Users\CG\Documents\udacity\rot13serendipo\main.py", line 51, in post 
    text = rot13(text) 
    File "C:\Users\CG\Documents\udacity\rot13serendipo\main.py", line 43, in rot13 
    return st.translate(tab) 
TypeError: character mapping must return integer, None or unicode 
    INFO  2012-04-28 20:02:26,862 dev_appserver.py:2891] "POST/HTTP/1.1" 500 - 

I() hata rot13 olmalıdır biliyorum. Ama bu prosedürü IDE'de çalıştırdığımda normal çalışır. İşte

kodum: Herhangi bir yardım için şimdiden

import webapp2 

form= """ 
    <html> 
    <head> 
    <title>Unit 2 Rot 13</title> 
    </head> 

    <body> 
    <h2>Enter some text to ROT13:</h2> 
    <form method="post"> 
     <textarea name="text" 
       style="height: 100px; width: 400px;"></textarea> 
     <br> 
     <input type="submit"> 
    </form> 
    </body> 

    </html> """ 

def rot13(st): 
    import string 
    tab1 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 
    tab2 = 'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM' 
    tab = string.maketrans(tab1, tab2) 
    return st.translate(tab) 

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

    def post(self): 
     text = self.request.get("text") 
     text = rot13(text) 
     self.response.out.write(text) 


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

teşekkürler!

+0

Kuralların ve (Linux üzerinde 64 bit EPD Python 2.7.2 kullanarak) girişi ile yeniden olamaz. Belki de sizin için başarısız olan ve deneyebileceğimiz küçük bir tam örnek ekleyebilirdiniz? – NPE

+0

Teşekkürler aix. Galiba Andrew nedenini keşfetti. (metin unicode olarak giriliyor). Bunu nasıl düzelttiğimi biliyor musun? – craftApprentice

cevap

35

metin unicode olarak girilen ediliyor muhtemelen çünkü:

Eğer unicode dizeleri olmadığına karar eminseniz:

>>> def rot13(st): 
...  import string 
...  tab1 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 
...  tab2 = 'nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM' 
...  tab = string.maketrans(tab1, tab2) 
...  return st.translate(tab) 
... 
>>> rot13('test') 
'grfg' 
>>> rot13(u'test') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 6, in rot13 
TypeError: character mapping must return integer, None or unicode 
>>> 

Bu soru ne gerek kapakları önemli değil sanırım sen sadece:

return str(st).translate(tab) 
+0

Teşekkürler, Andrew, haklısın galiba. Bunu nasıl düzeltirim? – craftApprentice

+0

Daha fazla bilgi için güncelleyin –

+0

Teşekkürler, Andrew. Bana çok, çok yardımcı oldunuz. – craftApprentice