1

ROT13 には無数の方法があり、Python には組み込み関数さえあることは知っていますが、自分が書いたコードを変更する方法を本当に理解したいと思っています。エディターでテストすると正常に動作しますが (空白、句読点、および大文字と小文字を維持)、Web ページでは動作しません。文字を出力するだけで、結果の文字列にコピーしないと言われました。私は何時間もそれで遊んできましたが、return ステートメントを組み込むためにそれを操作する方法をまだ理解していません。

これがばかげた質問である場合は申し訳ありません-私は初心者です:)どんな助けも大歓迎です。

dictionary = {'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'}

def rot(xy):

    for c in xy:

        if c.islower():
            print dictionary.get(c),

        if c.isupper():
            c = c.lower()
            result = dictionary.get(c)
            print result.capitalize(),

        if c not in dictionary:
            print c,

    return rot
4

5 に答える 5

2

自分で書いたように、結果を出力しています。標準出力への出力は、Web アプリケーションでは機能しません。通常、Web サーバー プロセスにデータを戻すためにプロトコル (UNIX ソケットなど) を使用するためです (または、Twisted などの Python ベースの Web サーバーを使用する場合)。標準出力は、プロセスを開始したコンソールに出力されます)。

したがって、ここでも、値を出力するのではなく、値を返すように関数を変更する必要がありますStringIOこれを行うには無数の方法がありますが、最も簡単な方法は、標準出力をオブジェクトに置き換えることです。

from StringIO import StringIO

def rot(xy):
    rot = StringIO()
    for c in xy:

        if c.islower():
            print >>rot, dictionary.get(c),

        if c.isupper():
            c = c.lower()
            result = dictionary.get(c)
            print >>rot, result.capitalize(),

        if c not in dictionary:
            print >>rot, c,

    return rot.getvalue()

それを行うためのより基本的な方法は、出力をリストに保存することです。

def rot(xy):
    rot = []
    for c in xy:

        if c.islower():
            rot.append(dictionary.get(c))

        if c.isupper():
            c = c.lower()
            result = dictionary.get(c)
            rot.append(result.capitalize())

        if c not in dictionary:
            rot.append(c)

    return ''.join(rot)
于 2013-04-09T17:29:02.993 に答える
0
alphabets = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
c_alphabets = []
for i in alphabets:
   c_alphabets.append(i.capitalize())
def rot13(s):
    out_string=''
    for i in s:
        if i in alphabets:
            j = alphabets[(alphabets.index(i) + 13) % 26]
            out_string += j
        elif i in c_alphabets:
            j = c_alphabets[(c_alphabets.index(i) + 13) % 26]
            out_string += j
        else:
            out_string += i
    return out_string
于 2014-05-13T16:28:14.800 に答える
0

値を印刷しているだけで、腐敗を構築していません。実際、関数自体を返していますが、これはまったく正しくありません。

于 2013-04-09T17:25:28.440 に答える
0
dictionary = {'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'}

def rot(xy):
    rot13 = ''
    for c in xy:
        if c.islower():
            rot13 += dictionary.get(c)
        if c.isupper():
            c = c.lower()
            rot13 += dictionary.get(c).capitalize()
        if c not in dictionary:
            rot13 += c
    print "ROTTED: ", rot13  
    return rot13
于 2013-04-09T18:06:59.837 に答える
0
#!/usr/bin/env python
import string

# Create alpha using 'string.ascii_uppercase' and 'string.ascii_lowercase' methods.
# Create rotated 13 using list/array positioning
# Create translation table using string.maketrans()
# Use translation table using string.translate()

# Get the alpha
alphaUpper=string.ascii_uppercase
rotatedUpper=alphaUpper[-13:] + alphaUpper[:-13]

alphaLower=string.ascii_lowercase
rotatedLower=alphaLower[-13:] + alphaLower[:-13]

combinedOriginal=alphaLower + alphaUpper
combinedRotated=rotatedLower + rotatedUpper

print combinedOriginal
print combinedRotated

translation_table = string.maketrans( combinedOriginal, combinedRotated )

message="This is the original message."

print message.translate(translation_table)
print message.translate(translation_table).translate(translation_table)

スクリプトを実行すると、次のようになります。

$ ./rot.py 
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM
Guvf vf gur bevtvany zrffntr.
This is the original message.
于 2013-04-09T19:56:16.880 に答える