0

現在Pythonで暗号化を行っていますが、別の関数内で別の外部関数を呼び出す方法について助けが必要です

これが外部関数です...これまでのところ 100% 正しく動作しています!

def buildCoder(shift):
    import string
    import random
    from itertools import chain, islice
    from string import ascii_uppercase, ascii_lowercase   
    def _helper(letters):
        return dict(zip(letters, chain(islice(letters, shift, None), letters)))
    d = _helper(ascii_uppercase)
    d.update(_helper(ascii_lowercase))
    return d   

そして、ここに新しい関数があります:

def applyCoder(text, coder):
    buildCoder(int(n))
    coder = buildCoder(int(n))
    newtext = string.translate(text, buildCoder(int(n)))
    return newtext

コードに何か問題があります。テスト ケースの下にいくつかのテスト ケースがあります。

>>> applyCoder("Hello, world!", buildCoder(3))
'Khoor, zruog!'
>>> applyCoder("Khoor, zruog!", buildCoder(23))
'Hello, world!'

そのようなテストが行​​われると、上記の結果がポップアップするはずです...

ただし、上記の関数を呼び出すたびに次のエラー メッセージが表示されますapplyCoder("string",buildCoder(n))。これは、n が定義されていないと言っていますが、関数を呼び出すと、たとえばapplyCoder("drink milk love life",buildCoder(5))、次の出力が得られるとします。

  Traceback (most recent call last):
     File "<pyshell#24>", line 1, in <module>
     applyCoder("drink milk love life", buildCoder(5))
  File "C:\ProblemSet5\ProblemSet5\ps5_encryption.py", line 143, in applyCoder
    buildCoder(int(n))
NameError: global name 'n' is not defined

では、どうすればこの機能を修正することができdef applyCoder(text, coder):ますか?

4

1 に答える 1

0

n はグローバル n を参照します。

あなたはあなたのpythonshellに次のようなものを書きました:

n = ...

def applyCoder(text, coder):
    buildCoder(int(n))
    coder = buildCoder(int(n))
    newtext = string.translate(text, buildCoder(int(n)))
    return newtext

n = ... # or this

しかし、これは次のようになります。

def applyCoder(text, coder):
    newtext = string.translate(text, coder)
    return newtext

それは役に立ちますか?

于 2013-03-16T10:49:02.340 に答える