我一直试图制作加密和解密系统,但我遇到了一个小错误。这是我的代码:
import sys
import pyperclip
def copy(data):
question = input("Copy to clipboard? ")
if question.lower() == 'yes' or question.lower() == 'y':
pyperclip.copy(data)
print("Encrypted message copied to clipboard.")
rerun()
elif question.lower() == 'no' or question.lower() == 'n':
rerun()
else:
print("You did not enter a valid input.")
copy(data)
def rerun():
ask = input("\nWould you like to run this program again? ")
if ask.lower() == "yes" or ask.lower() == "y":
print(" ")
run()
elif ask.lower() == 'no' or ask.lower() == 'n':
sys.exit("\nThank you!")
else:
print("You did not enter a valid input.")
rerun()
def encrypt(key, msg):
encrypted_message = []
for i, c in enumerate(msg):
key_c = ord(key[i % len(key)])
msg_c = ord(c)
encrypted_message.append(chr((msg_c + key_c) % 127))
return ''.join(encrypted_message)
def decrypt(key, encrypted):
msg = []
for i, c in enumerate(encrypted):
key_c = ord(key[i % len(key)])
enc_c = ord(c)
msg.append(chr((enc_c - key_c) % 127))
return ''.join(msg)
def run():
function_type = input("Would you like to encrypt or decrypt a message? ")
if function_type.lower() == "encrypt" or function_type.lower() == "e":
key = input("\nKey: ")
msg = input("Message: ")
data = encrypt(key, msg)
enc_message = "\nYour encrypted message is: " + data
print(enc_message)
copy(data)
elif function_type.lower() == "decrypt" or function_type.lower() == "d":
key = input("\nKey: ")
question = input("Paste encrypted message from clipboard? ")
if question.lower() == 'yes' or question.lower() == 'y':
encrypted = pyperclip.paste()
print("Message: " + encrypted)
elif question.lower() == 'no' or question.lower() == 'n':
encrypted = input("Message: ")
else:
print("You did not enter a valid input.")
run()
decrypted = decrypt(key, encrypted)
decrypted_message = "\nYour decrypted message is: " + decrypted
print(decrypted_message)
copy(decrypted)
else:
print("\nYou did not enter a valid input.\n")
run()
run()
它说 本地变量'加密'可能会在分配之前引用 并突出显示
decrypted = decrypt(key, encrypted)
在run()函数下。
是不是因为我使用了变量'加密'在其他功能?如果是这样,我将如何解决此问题并仍然保持我的程序的功能?
我对python比较陌生,所以如果你能解释一下你的答案我会很感激。
答案 0 :(得分:8)
如果执行else
分支,则未定义encrypted
。 IDE不知道您再次致电run()
。
请记住,这可能导致无限递归,因此您应该使用另一个控制流机制(尝试使用在输入有效时中断的while
循环)
答案 1 :(得分:4)
本地变量'已加密'可能在作业之前被引用
是由linter生成的警告。
这是因为如果条件
,linter会看到 <LinearLayout
android:id="@+id/LinearLayout02"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal">
<Button
android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" android:text="Übernehmen">
</Button>
<Button
android:id="@+id/Button03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Abbrechen">
</Button>
</LinearLayout>
被赋予两个值
encrypted
和
if question.lower() == 'yes' or question.lower() == 'y':
然而,如果条件相互补充,那么短信不能知道这两个。因此,考虑到没有条件为真的情况,变量elif question.lower() == 'no' or question.lower() == 'n':
将最终未初始化。
要摆脱此警告,您只需在具有encrypted
值<{1}}的任何if
条件之前简单地初始化变量
答案 2 :(得分:0)
在run()
添加encrypted = None
之前