-1

私はpythonが初めてで、これを行う方法が本当に見つかりません。

いくつかの基準に基づいて文字列の文字を変更したい。コードは次のとおりです。

for c in text:
    ordChar=ord(c)
    if ordChar>=65 and ordChar<=90:
        ordChar=ordChar+13
        if ordChar>90:
            ordChar=ordChar-90+64
        c=chr(ordChar)
    else:
        if ordChar>=97 and ordChar<=122:
            ordChar=ordChar+13
            if ordChar>122:
                ordChar=ordChar-122+96
            c=chr(ordChar)
return text

戻りtext値はパラメーター値と同じです。変数はポインタだと思っていたので、編集c、編集する必要がありますtext。私は何を間違っていますか?

4

3 に答える 3

5

あなたは「編集」cしているのではなく、別のものに割り当てています。1 つの代替方法は、古い文字列を変更しようとする代わりに新しい文字列を作成することです (これは不可能ですc=...) newstr += ...

于 2013-08-26T17:36:06.760 に答える
2

Arshajii と Josh の回答のように新しい文字列を作成するか、またはmapリスト内包表記を使用して文字ごとに変換を適用します。(いずれにしても、元の文字列を変換するのではなく、新しい文字列を作成しています。)

def convert_char(c):
    code = ord(c)
    if 65 <= code <= 90:
        code += 13
        if code > 90:
            code -= 26
    elif 97 <= ord(c) <= 122:
        code += 13
        if code > 122:
            code -= 26
    return chr(code)

 print ''.join(map(convert_char, "Testing"))

これを行うには、次のようなより良い方法がいくつかあります。

def convert_char(c):
    if 'a' <= c <= 'z':
        return chr(97 + (ord(c) - 6) % 26)
    elif 'A' <= c <= 'Z':
        return chr(65 + ord(c) % 26)
    return c

また

from string import lowercase, uppercase
def convert_char(c):
    if c in lowercase:
        return lowercase[(lowercase.index(c) + 13) % 26]
    if c in uppercase:
        return uppercase[(uppercase.index(c) + 13) % 26]
    return c

(コメント内の以前の回答へのリンクには、さらに多くの情報があります。)

于 2013-08-26T17:49:49.827 に答える