嵌套For循环Python

2024-09-21 13:57:09 发布

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

我正在尝试建立一个解码函数。此函数应查找“短语”中的字母与“键”中的字母之间的距离,距离后应跟“键”中相应的字母。你知道吗

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

我不知道为什么我的“解码短语”功能不起作用。你知道吗

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\u短语('mike','sam')时,我当前得到的字符串索引超出了范围。但代码中有比我确定的更严重的问题


Tags: key函数距离newgetsamdef字母
1条回答
网友
1楼 · 发布于 2024-09-21 13:57:09

如果要在到达键字符串的末尾时重复该键字符串,那么只需要一个循环,在短语中生成索引。您可以使用%模运算符将第二个索引放入键中,必要时环绕:

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是字符串时,这可能是最简单的解决方案。但是如果你想有点花哨的话,你可以用^{}来制作一个版本,它可以适用于任何类型的iterable(不仅仅是indexable序列):

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

相关问题 更多 >

    热门问题