我有一个分配,我必须通过查找偏移代码来解码字符串。偏移代码表示字符串中的字符在字母表中移动的位置数。如果我能找到这个数字,我可以解码字符串。
这是字符串:vyzhesjdpwqncjae
我正在考虑创建一个for循环来遍历字符串并更改每个字符的位置,并查看哪个迭代生成一个单词。但我不太清楚如何做到这一点。
这是我到目前为止的代码:
def decode (newInput):
for i in range (1,27):
newInput2 = newInput[i+1]
print "Trying to decode:", newInput2
decode(newInput)
但这不起作用。我想输出打印每次迭代可能的单词组合 - 当字符串中的每个字符移动一个空格时,两个,三个......直到26.这是最好的方法吗?
请记住,我是初学者,我认为我应该坚持使用for循环。我看过一些关于使用字典功能的帖子,但我还没有完全了解它。
感谢您的帮助!
答案 0 :(得分:0)
我想提供一些可能对您有所帮助的不同解决方案。你提到你是初学者,所以我会提供一个for循环,但我强烈建议你研究list comprehension - 这是一个有价值和有趣的工具。
请注意,我对所有解决方案使用此shift
辅助函数:
def shift(char, dist):
ascii = ord(char) + dist
if ascii > 122:
ascii = ascii - 26
return chr(ascii)
如果您还不熟悉这些解决方案,请查看python的lower和format函数。
def decode_loops(newInput):
print('For loops only')
for i in range(1, 27):
decoded = ''
for c in newInput.lower():
decoded += shift(c, i)
print('{0}: {1}'.format(i, decoded))
对于这个,如果您还不熟悉它,请查看python的join函数。
def decode_list_comp(newInput):
print('For loop and list comp')
for i in range(1, 27):
decoded = ''.join([shift(c, i) for c in newInput.lower()])
print('{0}: {1}'.format(i, decoded))
这个只是为了表明你可以通过列表理解获得多么复杂 - 我并不是说这是一个很好的解决方案,只是提供更多选项并深入了解你可以用它做什么。就个人而言,如果我不能“阅读”一个列表理解非常接近它听起来如何口头描述它,它可能太复杂了。但我离题了。
def decode_complex_list_comp(newInput):
print('Complex list comprehension')
shifted = [shift(c, i) for i in range(1, 27) for c in newInput.lower()]
decoded_words = [''.join(decoded) for decoded in [shifted[i:i + len(newInput)] for i in range(0, len(shifted), len(newInput))]]
for i, decoded in enumerate(decoded_words):
print('{0}: {1}'.format(i + 1, decoded))
希望这些可能的解决方案为您提供一些帮助。但请记住,有许多方法可以做到这一点。这些只是我提出的一些选择。