我需要创建一个ceasar密码程序,它接受一个字符串,将其转换为ASCII,将其移位4,将其转换回字符串,打印它,然后通过反转密码函数来解密它,然后打印原始字符串。然而,在我的函数的返回值不工作。我该如何解决这个问题?#密码函数
def cipher(string):
string = ""
NewX = 0
encrypted = 0
for letter in range(len(string)):
NewX = string[letter]
#encrypted is the encrypted word
encrypted = chr(ord(NewX)+4)
return encrypted
#Decipher function
def decipher(NewX):
NewString = ""
for letter in range(len(encrypted)):
NewString = chr(ord(encrypted)-4)
return(NewString)
def main():
string = input("enter your string here: ")
cipher(string)
print(encrypted)
decipher(NewX)
print()
main()
代码中有不少错误。
缩进。在Python中,代码块由代码缩进的程度来表示。在破译函数中,
NewString = ""
for letter in range(len(encrypted)):
NewString = chr(ord(encrypted)-4)
return(NewString)
return
在右边多了一个空格,或者上面的行在左边多了一个空格(更有可能)。
连接。在代码中,结果被声明为空、0或";(并将String
设置为"清空您输入的字符串)。很明显,这个想法是在结果的末尾添加转换后的字符。但是,代码将分配转换后的字符,并重写现有的内容。一种简单的方法是使用操作符+=
encrypted += chr(ord(NewX)+4)
参数。在解密函数中,传入的参数是NewX
,而实际使用的变量是encrypted
。这是应该传入的参数。此外,您是在整个字符串上运行ord
,而不是在单个字符上运行。
For循环。你可以简单地说:
for letter in string:
而不是
for letter in range(len(string)):
NewX = string[letter]
返回值。在代码中,运行了encrypt和decipher函数,但由于没有捕获结果,因此结果将被丢弃。
改正这些错误后,代码是:def cipher(string):
encrypted = ""
for letter in string:
#encrypted is the encrypted word
encrypted += chr(ord(NewX)+4)
return encrypted
#Decipher function
def decipher(encrypted):
NewString = ""
for letter in encrypted:
NewString += chr(ord(letter)-4)
return(NewString)
def main():
string = input("enter your string here: ")
encrypted=cipher(string)
print(encrypted)
decyphered=decipher(encrypted)
print(decyphered)
main()
您需要将函数返回的值存储在一个变量中。例如,在main()
函数块
encrypted= cipher(string)
print(encrypted) # Printing stored value
print(decipher(NewX)) # You can directly print it too without storing