Python:Caesar密码
大家好,我是python新手,我正在编写一个名为cipher.py的程序,它要求用户输入一个字符串和移位量,然后显示加密后的字符串。我想知道为什么我得到的“函数”对象不是迭代错误。我在第19行和第36行发现错误,说“function”对象不是迭代的 这是我的密码:Python:Caesar密码,python,Python,大家好,我是python新手,我正在编写一个名为cipher.py的程序,它要求用户输入一个字符串和移位量,然后显示加密后的字符串。我想知道为什么我得到的“函数”对象不是迭代错误。我在第19行和第36行发现错误,说“function”对象不是迭代的 这是我的密码: def Ciphertext(): print('Please enter a string to be ciphered:', end='') Ciphertext = input() return inpu
def Ciphertext():
print('Please enter a string to be ciphered:', end='')
Ciphertext = input()
return input()
def Character():
while True:
Character = 0
print('Please enter a shift amount between 0 and 25:', end='')
Character = (input())
Max_Character = 26
if (float(Character) <= 26):
if (float(Character) > 1):
print(Character)
break
def getShiftedcipher(Ciphertext, Character):
for Character in Ciphertext:
if Character.isalpha():
var = ord(Character)
var += Ciphertext
if Character.islower():
if var < ord('a'):
var += 26
if Character.isupper():
if var < ord('A'):
var += 26
else:
print('Please enter a shift amount between 0 and 25:', end='')
return
print(getShiftedcipher(Ciphertext, Character))
以下是我的错误:
Traceback (most recent call last):
File "C:\Users\ALIENWARE\Desktop\cipher.py", line 36, in <module>
print(getShiftedcipher(Ciphertext, Character))
File
"C:\Users\ALIENWARE\Desktop\cipher.py", line 19, in getShiftedcipher
for Character in Ciphertext:
TypeError: 'function' object is not iterable
问题是您正试图迭代一个函数
for Character in Ciphertext:
这里,密文是对函数的引用,而不是像您可能假设的那样的字符串,问题是您试图在函数上迭代
for Character in Ciphertext:
这里的密文是对函数的引用,而不是像您可能假设的字符串问题在这里:
print(getShiftedcipher(Ciphertext, Character))
您编写的getShiftedcipher函数期望为其第一个参数获取字符串或其他iterable。但你传递的是一个函数,密文,不是字符串。因此,当它尝试将该函数用作字符串时,会出现错误
您还为第二个参数传递了另一个函数Character。你可以这样做,因为getShiftedcipher忽略了它的第二个参数
大概您想要做的是调用密文函数并传递结果,而不是函数本身。像这样:
print(getShiftedcipher(Ciphertext(), Character()))
除此之外,代码中还有很多其他问题。不经意间:
密文调用input两次,忽略用户的第一次输入并等待另一次输入,这至少会让人非常困惑。
字符实际上并没有返回值,它只是输出一个值,然后什么也不返回,所以无论何时调用字符,都不会得到任何值。您需要返回floatCharacter。
当你想要一个介于0和25之间的整数时,你真的不应该使用float;使用int。
提示要求输入0到25之间的数字,但代码会检查1到26之间的数字。
在getShfitedCipher中,您在参数字符中获取一个数字,然后通过在中为密文中的字符创建另一个同名变量来立即隐藏该数字:。使用两个不同的名称。可以调用参数Shift。
在getShiftedCipher中,您正在执行var+=Ciphertext。但是密文不是一个可以像那样添加的数字,它是一个字符串。假设前面的更改,您可能希望var+=Shift。
你做了所有的工作来为每个字符计算一个新的var值……但是你从来没有对它做过任何事情。可能需要打印chrvar、end=或其他内容。
您试图通过检查新值是否已变为来处理翻转问题,问题在于:
print(getShiftedcipher(Ciphertext, Character))
您编写的getShiftedcipher函数期望为其第一个参数获取字符串或其他iterable。但你传递的是一个函数,密文,不是字符串。因此,当它尝试将该函数用作字符串时,会出现错误
您还为第二个参数传递了另一个函数Character。你可以这样做,因为getShiftedcipher忽略了它的第二个参数
大概您想要做的是调用密文函数并传递结果,而不是函数本身。像这样:
print(getShiftedcipher(Ciphertext(), Character()))
除此之外,代码中还有很多其他问题。不经意间:
密文调用input两次,忽略用户的第一次输入并等待另一次输入,这至少会让人非常困惑。
字符实际上并没有返回值,它只是输出一个值,然后什么也不返回,所以无论何时调用字符,都不会得到任何值。您需要返回floatCharacter。
当你想要一个介于0和25之间的整数时,你真的不应该使用float;使用int。
提示要求输入0到25之间的数字,但代码会检查1到26之间的数字。
在getShfitedCipher中,您在参数字符中获取一个数字,然后通过在中为密文中的字符创建另一个同名变量来立即隐藏该数字:。使用两个不同的名称。可以调用参数Shift。
在getShiftedCipher中,您正在执行var+=Ciphertext。但是密文不是一个可以像那样添加的数字,它是一个字符串。假设前面的更改,您可能希望var+=Shift。
你做了所有的工作来为每个字符计算一个新的var值……但是你从来没有对它做过任何事情。可能需要打印chrvar、end=或其他内容。
您试图通过检查新值是否已更改来处理滚动。请不要用模糊的术语描述您的错误,复制并粘贴整个异常并回溯到您的问题中。我会我正在处理itI修复您建议的所有或大部分错误???我不明白为什么我得到了类似“NoneType”的东西。对象是不可编辑的。如果你想问一个后续问题,创建一个新的问题,不要试图编辑你现有的问题以询问其他问题。但是快速看一眼:看起来你在密文的结尾添加了一个没有值的返回,所以它总是不返回任何值,而不是从输入中获得的字符串。我不知道你为什么这么做,但那是c
至少是因为这个问题:你不能重复“无”,因为这毫无意义。请不要用模糊的术语描述你的错误,复制并粘贴整个异常并回溯到你的问题中。我会我正在处理它。我修复了你建议的所有或大部分错误???我不明白为什么我得到了类似“NoneType”的东西。对象是不可编辑的。如果你想问一个后续问题,创建一个新的问题,不要试图编辑你现有的问题以询问其他问题。但是快速看一眼:看起来你在密文的结尾添加了一个没有值的返回,所以它总是不返回任何值,而不是从输入中获得的字符串。我不知道您为什么这样做,但这至少是这个问题的原因:您不能对任何对象进行迭代,因为这毫无意义。