目前,我正在为我的计算机科学课开发一个Caesar Cipher程序。但是,在这种情况下,我不知道如何使用用户定义的函数。我一直收到UnboundLocalError
#user defined functions
def encrypt(message, distance):
"""Will take message and rotate it the distance, in order to create an encrypted message"""
for ch in message:
ordvalue = ord(ch)
cipherValue = ordvalue + distance
if cipherValue > ord("z"):
cipherValue = ord("a") + distance - (ord("z") - ordvalue + 1)
encryption += chr(cipherValue)
return encryption
#input
message = input("Enter word to be encrypted: ") #original message
distance = int(input("Enter the distance value: ")) #distance letters will be moved
# test
fancy = encrypt(message, distance)
#encryption
print(fancy)
答案 0 :(得分:0)
您正在访问变量encryption
,而未声明它。在for
循环之前将其声明为空字符串,以准备为其添加部分字符串。
在here网站上的相关讨论中查看更多讨论。
另一方面,函数中的return语句在for
循环中缩进,这意味着它将在循环一次迭代后退出该函数,从而使循环毫无意义。这看起来像是一个错误,应该缩进一个级别。
答案 1 :(得分:0)
出现UnboundLocalError的原因是,在编写encryption
时,在定义encryption += chr(cipherValue)
之前先引用了encryption
,因为return
从未被首先定义。要解决此问题,您可以在函数开始时将其定义为空字符串。
此外,您需要将def encrypt(message, distance):
"""Will take message and rotate it the distance, in order to create an encrypted message"""
encryption = ""
for ch in message:
ordvalue = ord(ch)
cipherValue = ordvalue + distance
if cipherValue > ord("z"):
cipherValue = ord("a") + distance - (ord("z") - ordvalue + 1)
encryption += chr(cipherValue)
return encryption
语句移出一个程序段,以便它在循环之后而不是在循环之后出现。
这是一个例子:
SELECT student_number, subject, exam_date
FROM tables t
WHERE EXISTS (
SELECT 1 FROM tables
WHERE
student_number = t.student_number
AND
exam_date = t.exam_date
AND
subject <> t.subject
)