C コードがpassword
インプレースで変更されています。したがって、最も近いものは次のようになります。
def myencrypt(password, mkey):
for i in range(len(password)):
password[i] = chr(ord(password[i]) - mkey)
これは、文字列ではなく文字列でpassword
あると想定しています。list
chr
また、各 の結果を呼び出していることに注意してord(password[i]) - mkey
ください。そうしないと、各文字が数字に置き換えられるためです。たとえば、ではなく が返されmyencrypt(['a'], 32)
ます。(C ではとは同じ値であるため、これは C では必要ありません。)[65]
['A']
65
'A'
この関数を文字列で呼び出して、文字列を取得する可能性が高くなります。変換して元に戻すだけで、C スタイルのインプレース機能を引き続き使用できます。
def myencrypt(password, mkey):
newpass = list(password)
for i in range(len(newpass)):
newpass[i] = chr(ord(newpass[i]) - mkey)
return ''.join(newpass)
ただし、これは非常に Pythonic な方法ではありません。より慣用的な解決策は次のとおりです。
def myencrypt(password, mkey):
return ''.join(chr(ord(ch) - mkey) for ch in password)
そして、それはより一般的なポイントをもたらします: 非常に些細な場合を除いて、「C コードを Python に直接変換」しようとするのは悪い考えです。代わりに、C コードが何をするかを理解し、C コードが行った方法ではなく、Python にとって最良の方法で同じタスクを達成する新しい Python コードを作成します。