【问题标题】:Nested For Loops Python嵌套 For 循环 Python
【发布时间】:2017-02-08 02:00:10
【问题描述】:

我正在尝试构建解码功能。这个函数应该找到'phrase'中的字母和'key'中的字母之间的距离,并且距离后面应该有'key'中的相应字母。

例如,让 'phrase' = 'hello' 和 'key' = 'sam' 那么,由于 'h' 距离 's' 11 个字母,因此函数的一次迭代应该返回 's11'

我不知道为什么我的“decode_phrase”功能不起作用。

def get_distance(letter1, letter2):

    if letter1 < letter2:
        x = (ord(letter2) - ord(letter1))
    elif letter1 == letter2:
        x = 0
    elif letter1 > letter2:
        x = (ord(letter2) - ord(letter1)) + 26
    return x



def decode_phrase(phrase, key):


    new_word = ''
    i = 0
    k = 0

    for p in range(len(phrase)):
        for q in range(len(key)):
            y = get_distance(phrase[i], key[k])
            new_word = new_word + key[k] + str(y)
            k = k +1
            i = i +1
    return new_word

当我输入 decode_phrase('mike','sam') 时,我当前的字符串索引超出范围。但是代码中存在比我确信的更严重的问题

【问题讨论】:

  • 不要贴代码图片,把代码放在你的问题里
  • 还提供有关 decode_phrase 无法正常工作的更多信息。提供一个示例,说明在给定特定输入时它会返回什么,以及您希望它返回什么。
  • 顺便说一句,get_distance 可以变得更简单:x = ord(letter2) - ord(letter1); if x &lt; 0: x += 26 之类的就足够了。
  • 发布完整的回溯
  • 当key的长度小于短语的长度时,你的函数应该做什么?密钥是否重复?如果是这样,您可能只想为索引设置一个循环,您可以使用key[i % len(key)] 从键中获取适当的字符。

标签: python string for-loop nested-loops


【解决方案1】:

如果您应该在结束时重复键字符串,那么您只需要一个循环,为短语生成一个索引。您可以使用 % 模数运算符来获取密钥的第二个索引,如果需要,可以环绕:

def decode_phrase(phrase, key):
    for i in range(len(phrase)): # use just one loop for the phrase index
        j = i % len(key)         # take a mod to get a key index
        y = get_distance(phrase[i], key[j])
        new_word += key[j] + str(y)
    return new_word

phrasekey 是字符串时,这可能是最简单的解决方案。但是,如果你想有点花哨,你可以使用itertools.cycle 来制作一个适用于任何类型的可迭代(不仅是可索引序列)的版本:

import itertools

def decode_phrase(phrase, key):
    for p, k in zip(phrase, itertools.cycle(key)):
        new_word += k + str(get_distance(p, k))
    return new_word

【讨论】:

    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2017-06-05
    • 2019-04-15
    • 2020-10-09
    • 2017-08-27
    • 2017-11-11
    相关资源
    最近更新 更多