文字列を取り込んで文字を新しい文字列に変更する単純な暗号化アルゴリズムのプログラムがあります。再帰の深さが制限を超えている理由を理解できません
アルファベットのスクランブルされた文字をcode
テーブルに入れます。この機能では、私はcheckRepeat
という文字を繰り返しないようにする関数を持っています。私が手でこれを行うと(ランダム整数生成部分以外の)意味がありますが、私のコンピュータはそれを気に入らず、「再帰深度」を超えています。ここで
from random import *;
string="Hello I am a computer";
alphTable=['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'];
def checkRepeat(array,val):
global alphTable
for i in range(len(array)):
if val==array[i]:
location=randint(0,25);
array.append(alphTable[location]);
checkRepeat(array,val);
def makeEncryptTable():
encryptTable=[];
global alphTable;
for i in range (26):
location=randint(0,25);
encryptTable.append(alphTable[location]);
checkRepeat(encryptTable,encryptTable[i]);
return encryptTable;
array1=makeEncryptTable();
print(array1);
はエラーコードです:
Traceback (most recent call last):
File "/home/brandon/Documents/CG 301/WilliamsBrandonStringEncrpytionAlgorithm.py", line 38, in <module>
array1=makeEncryptTable();
File "/home/brandon/Documents/CG 301/WilliamsBrandonStringEncrpytionAlgorithm.py", line 35, in makeEncryptTable
checkRepeat(encryptTable,encryptTable[i]);
File "/home/brandon/Documents/CG 301/WilliamsBrandonStringEncrpytionAlgorithm.py", line 27, in checkRepeat
checkRepeat(array,val);
...
File "/home/brandon/Documents/CG 301/WilliamsBrandonStringEncrpytionAlgorithm.py", line 27, in checkRepeat
checkRepeat(array,val);
File "/home/brandon/Documents/CG 301/WilliamsBrandonStringEncrpytionAlgorithm.py", line 25, in checkRepeat
location=randint(0,25);
File "/usr/lib/python3.4/random.py", line 218, in randint
return self.randrange(a, b+1)
File "/usr/lib/python3.4/random.py", line 194, in randrange
return istart + self._randbelow(width)
File "/usr/lib/python3.4/random.py", line 228, in _randbelow
if type(random) is BuiltinMethod or type(getrandbits) is Method:
RuntimeError: maximum recursion depth exceeded while calling a Python object
余分な ';'は必要ありません。 'python!= jQuery' – Pythonista
なぜあなたは再帰を使用していますか? 'global alphTable'も必要ありません –
パラメータを変更せずにcheckRepeat関数自体から' checkRepeat(array、val) 'を呼び出しています。 –