Caesar-Cypher程序:字符串索引超出范围

2024-05-18 21:42:13 发布

您现在位置:Python中文网/ 问答频道 /正文

是因为两个if和else语句在彼此内部?在

我正在为课堂编写一个凯撒密码程序。我收到一个错误:

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

只是一个侧记,我还将创建这个程序的另一个循环部分,以展开文本回到初始输入

^{pr2}$

Tags: inpy程序messagemainlineusersfile
2条回答

您已经用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,它在任何地方都没有定义。在

插入print语句以查看letterPos在程序运行过程中的值。看看26岁或更大。26或更大将需要if语句:if letterPos>;=26。在

相关问题 更多 >

    热门问题