Python 遍历列表

Python 遍历列表,python,Python,我目前正在做一个小的pet项目,我已经做了这么多,目前我的代码接受字符串,将字符串更改为相应的密码并显示它,但它显示整个迭代字符串。我做错了什么?我只需要翻译的字符串 代码 def encrypt_letter(letter): cipher = {'a': 'n', 'b': 'o', 'c': 'p', 'd': 'q', 'e': 'r', 'f': 's', 'g': 't', 'h': 'u', 'i': 'v', 'j'

我目前正在做一个小的pet项目,我已经做了这么多,目前我的代码接受字符串,将字符串更改为相应的密码并显示它,但它显示整个迭代字符串。我做错了什么?我只需要翻译的字符串

代码

def encrypt_letter(letter):
    cipher = {'a': 'n', 'b': 'o', 'c': 'p', 'd': 'q',
              'e': 'r', 'f': 's', 'g': 't', 'h': 'u',
              'i': 'v', 'j': 'w', 'k': 'x', 'l': 'y',
              'm': 'z', 'n': 'a', 'o': 'b', 'p': 'c',
              'q': 'd', 'r': 'e', 's': 'f', 't': 'g',
              'u': 'h', 'v': 'i', 'w': 'j', 'x': 'k',
              'y': 'l', 'z': 'm'}
    lowercase_letter = letter.lower()
    return cipher[lowercase_letter]

def encrypt(string):
    result = []
    letters = list(string)
    for letter in letters:
        encrypted_letter = encrypt_letter(letter)
        result.append(encrypted_letter)
        print "".join(result)

e = encrypt("hello")
print e
输出

u
ur
ury
uryy
uryyb
None
'uryyb'
预期产出

u
ur
ury
uryy
uryyb
None
'uryyb'

您的
print
位于
for
循环内;把它分为一级,即

    result.append(encrypted_letter)
print "".join(result)
这将防止通过循环重复打印。此外,函数中没有任何内容返回,请添加:

return result

在将输出发送到
e
的末尾(添加或替换
打印
),您正在打印for循环每次迭代的列表。要解决此问题,您需要做两件事:

  • Dedent
    print”“。加入(结果)
    1级

  • 在该行中,将
    print
    更改为

  • 以下是完整的代码:

    def encrypt_letter(letter):
        cipher = {'a': 'n', 'b': 'o', 'c': 'p', 'd': 'q',
                  'e': 'r', 'f': 's', 'g': 't', 'h': 'u',
                  'i': 'v', 'j': 'w', 'k': 'x', 'l': 'y',
                  'm': 'z', 'n': 'a', 'o': 'b', 'p': 'c',
                  'q': 'd', 'r': 'e', 's': 'f', 't': 'g',
                  'u': 'h', 'v': 'i', 'w': 'j', 'x': 'k',
                  'y': 'l', 'z': 'm'}
        lowercase_letter = letter.lower()
        return cipher[lowercase_letter]
    
    def encrypt(string):
        result = []
        letters = list(string)
        for letter in letters:
            encrypted_letter = encrypt_letter(letter)
            result.append(encrypted_letter)
        ######################
        return "".join(result)
        ######################
    
    e = encrypt("hello")
    print e
    
    输出:

    uryyb
    
    uryyb
    

    一个小小的改变就可以了!您需要的是
    返回
    字符串

    def encrypt(string):
        result = []
        letters = list(string)
        for letter in letters:
            encrypted_letter = encrypt_letter(letter)
            result.append(encrypted_letter)
        return "".join(result) # change to return
    
    e = encrypt("hello")
    print e # will give you expected output
    
    事实上,您可以使用以下方法编写更短的代码:

    def encrypt(string):
        cipher = {'a': 'n', 'b': 'o', 'c': 'p', 'd': 'q',
                  'e': 'r', 'f': 's', 'g': 't', 'h': 'u',
                  'i': 'v', 'j': 'w', 'k': 'x', 'l': 'y',
                  'm': 'z', 'n': 'a', 'o': 'b', 'p': 'c',
                  'q': 'd', 'r': 'e', 's': 'f', 't': 'g',
                  'u': 'h', 'v': 'i', 'w': 'j', 'x': 'k',
                  'y': 'l', 'z': 'm'}
        return ''.join(cipher[s] for s in string.lower())
    
    问题是

        print "".join(result)
    

    落在for循环中。

    我将从
    encrypt
    返回一个字符串,而不是打印一个

    def encrypt(string):
        result = ""
        for letter in list(string):
            result += encrypt_letter(letter)
        return result
    
    print(encrypt("hello"))
    
    输出: