0

私はPythonで書かれた次の小さな関数を持っています:

def encode(str):
    out = ""
    for i in str:
        ret += str(ord(i.upper()) - 64)
    return ret

基本的に、私がやりたいことは、alphabat の文字の番号を取得し、それを「out」文字列に連結することです。このコードでは、4 行目でトレースバックが表示されます。「str」オブジェクトは適用されません。

このエラーがスローされる理由と、これを修正する方法を教えてください。(これがすでに一度尋ねられた場合は申し訳ありませんが、おそらくPythonとプログラミングにかなり慣れていないため、見つけることができませんでした)

4

3 に答える 3

3

variable を呼び出さないでください。組み込み関数をstrシャドーイングしています。

outまた、 /の命名を修正する必要がありますret

個人的には、この関数を次のように記述します。

def encode(s):
   return ''.join(str(ord(c.upper()) - 64) for c in s)

(私は が何をするつもりなのかを実際には理解していないstr(ord(...))ので、あなたのコードからコピーしただけです。)

于 2012-11-30T20:07:12.983 に答える
3

定義済みの組み込み名で変数に名前を付けないでください。

あなたのコードでstrは、組み込み関数ではありません。これは、関数でパラメーターとして使用した変数です。

別の問題は、out変数を宣言しており、 retwhich を使用するとエラーが発生することです。に変更out = ""ret = ""ます。

于 2012-11-30T20:08:01.857 に答える
0

str他の人が言ったように、変数として使用しないでください。

私はこれがあなたが望むものだと思う:

def encode(s):
    return "".join(chr(ord(c.upper()) - 64) for c in s)

これは次と同等です。

def encode(s):
    out = ""
    for c in s:
        ret += chr(ord(c.upper()) - 64)
    return ret

chr()数値の ASCII/Unicode 値を 1 文字の文字列に変換する関数を探していました。Runningstr()は に変換5され"5"ます。

for c in sまた、文体上の注意として、文字列を反復for i in x処理するとき、および整数のシーケンスを反復処理するときに行うのが通例です。

于 2012-11-30T21:38:56.340 に答える