我的解码功能正常工作,但我的编码功能一直都很好,直到最后一个字母。当解决它应该显示“uryyb”为你好,而不是它“uryyl”。这是我的代码:
def encode(w, o):
result = ""
w = w.lower()
for i in w:
letter = ord(i)
if ord('a') <= letter <= ord('z'):
new_letter = letter + (o % 26)
if new_letter < 26:
new_letter += 26
result += chr(new_letter)
else:
result += chr(letter)
return result
答案 0 :(得分:0)
你在那里。您处理if (this.Frame.BackStackDepth > 1)
{
var distinctItems = this.Frame.BackStack.Distinct().ToList();
this.Frame.BackStack.Clear();
foreach (var item in distinctItems)
{
this.Frame.BackStack.Add(item);
}
}
但未处理if new_letter < 26
编辑:顺便说一下,查看ord(i)返回的值。您注意到26不是要检查的正确号码
答案 1 :(得分:0)
假设o
是班次数。您需要确保ord介于a
和z
之间。
# truncate overflowing
while new_letter < ord("a"):
new_letter += 26
# however, case above never shows up. Why?
while new_letter > ord("z"):
new_letter -= 26
result += chr(new_letter)
你会发现:
>> ord("a") # the base is not 26!
97