<p>我刚刚创建了我的第一个Python项目。我确信有很多改进可以做,但我有一个关于如何修改代码的具体问题</p>
<p>我一直在读到使用全局变量是不明智的(出于安全考虑)。但我不知道如何使多个函数一起工作(即使用相同的变量),除非它们是全局的</p>
<p>下面的程序有三个功能:</p>
<ol>
<li>生成密码</李>
<li>加密那个密码</李>
<li>解密密码</李>
</ol>
<p>但是,我在第2部分中只声明了全局变量来加密密码</p>
<p>我的问题是:如何修改代码以避免使用全局变量?我已经粘贴了下面的所有代码以供参考,但是globals是在<code>def listToString()</code>和<code>def passEncryptor():</code>中声明的</p>
<pre><code>import random
#variables to hold a list and a string
Password = []
Encrypted = ''
#variables to hold the specific characters
#to use in creating the password
a = 'abcdefghijklmnopqrstuvwxyz'
b = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
c = '0123456789'
d = '!@#$%^&*()'
#variable holds all possible values
#that could be found in the password
e = a + b + c + d
#variables will randomize the password length
sm = random.randint(2,3)
lg = random.randint(3,4)
#function generates a randomized password
def passwordGenerator() :
#append elements from variables a - d
#to the Password variable
for x in range(sm) :
Password.append(random.choice(a))
for x in range(sm) :
Password.append(random.choice(b))
for x in range(lg) :
Password.append(random.choice(c))
for x in range(sm) :
Password.append(random.choice(d))
#randomize the order of the elements
random.shuffle(Password)
#ensure the first element is a letter
Password.insert(0, random.choice(a))
#print to show that the program worked
print(Password)
#call function to generate a randomized password
passwordGenerator()
#function to store 5 random elements in a string
def listToString() :
#can't seem to get this to work
#without using a global variable
global rand5
rand5 = ''
x = random.choices(e, k=5)
for val in x :
rand5 += val
return rand5
#for each element in the password
#add the random 5 elements from listToString()
def passEncryptor():
global tempPass
tempPass = ''
for val in Password :
#gets 5 new random elements
listToString()
#concatenate the random elements
#with the real password
tempPass += val + rand5
print(tempPass)
passEncryptor()
#function to unencrypt an encrypted password
def passDecryptor():
#convert the encrypted string to a list
encryptedList = []
for val in tempPass :
encryptedList.append(val)
#remove the random 5 elements
decrypt = encryptedList[::6]
decrypted = ''
#convert back to a string
for val in decrypt :
decrypted += val
print(decrypted)
passDecryptor()
</code></pre>