是因为彼此内部有两个if和else语句吗?
我正在为课堂制作一个Caesar Cipher程序。我收到一个错误:
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
main()
File "C:\Users\Chandler\Desktop\CSCI220-S16-Assign2-CaesarEncode-CTL.py", line 31, in main
print("You coded message is: ", (code(message)))
File "C:\Users\Chandler\Desktop\CSCI220-S16-Assign2-CaesarEncode-CTL.py", line 25, in code
textInput += alphabet[letterPos]
IndexError: string index out of range
只是旁注我还将创建此程序的另一个循环部分,以将文本解包回初始输入
def main():
alphabet = "abcdefghijklmnopqrstuvwxyz"
message = input("Enter the message you wish to be encoded: ")
message = message.lower()
key = eval(input("Enter the key shift: "))
def code(message):
textInput = ""
for ch in message:
if ch in alphabet:
letterPos = alphabet.find(ch) + key
if letterPos > 26:
letterPos % key
else:
letterPos + key
textInput += alphabet[letterPos]
else:
cyphertext += ch
return textInput
print("You coded message is: ", (code(message)))
#end main
main()
答案 0 :(得分:0)
插入print语句,以便在程序进行时查看letterPos的值。找出26岁或更大的时间。 26或更大版本需要if语句:if letterPos&gt; = 26.
答案 1 :(得分:0)
您已使用letterPos = alphabet.find(ch) + key
移动该字母,并在必要时在if letterPos > 26
块中将其换行。但是,您必须使用模26,而不是key
值。另外,else块既是多余的也是冒犯的,因为你第二次移动字母而没有环绕。
由于分支较慢,因此每次都应使用模数。总而言之,这应该解决问题。
if ch in alphabet:
letterPos = (alphabet.find(ch) + key) % 26
textInput += alphabet[letterPos]
else:
textInput += ch
另外,请注意名称cyphertext
,它不会在任何地方定义。