我使用的是ROT13 python,当该数字大于26时,我会收到一个错误

我使用的是ROT13 python,当该数字大于26时,我会收到一个错误,python,Python,我正在读大学一年级,我的一项任务是ROT 13。我不知道如何使用if-else语句来阻止它在值大于26时崩溃 alphabets= "ABCDEFGHIJKLMNOPQRSTUVWXYZ" string_input= input("Enter a string") input_length= len(string_input) print(string_input) string_output="" for i in range(input_length): characte

我正在读大学一年级,我的一项任务是ROT 13。我不知道如何使用if-else语句来阻止它在值大于26时崩溃

alphabets= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

string_input= input("Enter a string")

input_length= len(string_input)

print(string_input)

string_output=""

for i in range(input_length):
     character=string_input[i]
     location_of_character= alphabets.find(character)
     new_location=location_of_character + 13;
     string_output= string_output+alphabets[new_location]
     if(string_output>78):print(alphabets(string_output -13))

您没有提到具体的错误消息,我的猜测是
新位置
有时大于
字母
,这会导致索引错误

希望你不介意,我对你的代码做了一些调整。我可以更进一步,但我想保持它与原来的程序相对类似

字母表='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
num_chars=len(字母表)
rot_金额=13
string_input=input('输入字符串:')
字符串_输出=“”
对于字符串输入中的curr\u char:
char\u loc=字母索引(curr\u char)
新位置=(字符位置+旋转数量)%num字符
字符串输出+=字母表[新位置]
打印(字符串输出)
一些解释:

char\u loc
location\u字符的作用相同。区别在于,正如MarkMeyer在他们的评论中指出的那样,
.index()
如果找不到值,将抛出一个错误,而
.find()
返回-1

new\u loc
是新字符的索引
char\u loc+rot\u amt
的作用与代码中字符+13的位置相同
%
是[modulo运算符](字符+13的位置),它使
char\u loc+rot\u amt的所有值在0-25范围内

string\u output+=alphabet[new\u loc]
与您的代码基本相同,我们获取新字符并将其附加到结果字符串中


如果您有任何问题,请告诉我:)

这是新的位置,您需要进行范围检查,而不是字符串输出。您希望减去26而不是13。您希望输入始终有效,仅由大写字母组成,对吗?您不需要在python中执行此操作:
对于范围内的i(输入长度):
。只需对字符串中的字符使用
\u输入:
@Rup是的,我更改了,谢谢,我应该在else中写什么statement@BenceHoston不,只需输入字符串中的字符:
您将在每个循环中的
字符
变量中得到一个字母。Python不鼓励使用索引,除非您在循环中确实需要它们。这是一个微妙的点,但最好使用
index()
而不是
find()
索引,如果找不到值,则会引发异常
find()
只返回-1,这意味着所有未找到的字符都被编码为
M
@AlexanderCécile谢谢,我真的理解了所有这些。我唯一的一个问题是什么是“curr_char”@benchehoston这和马克·迈耶在书中描述的是一样的
对于字符串输入中的curr\u char:
迭代
字符串输入中的项。在每次迭代中,它将当前项绑定到名称
curr\u char
,并在循环中执行代码。我倾向于使用前缀
curr
,表示当前,很多。这有意义吗?(如果没有,也没关系)