迭代列表

时间:2013-12-11 14:55:02

标签: python

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

代码

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'

6 个答案:

答案 0 :(得分:3)

一个小改动就行了!你想要的是return字符串。

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())

答案 1 :(得分:2)

您正在使用for循环的每次迭代打印出列表。您需要做两件事来解决问题:

  1. Dedent print "".join(result)一个级别。

  2. 在该行中,将print更改为return

  3. 以下是完整代码:

    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
    

答案 2 :(得分:1)

您的print位于for循环内;这是一个层次,即

    result.append(encrypted_letter)
print "".join(result)

这将防止通过循环重复打印。此外,没有任何内容从您的函数中获取{添加:

return
最后

(要么是return result 的补充或替换print),要将输出发送到e

答案 3 :(得分:1)

问题在于

    print "".join(result)

属于for循环。

答案 4 :(得分:0)

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

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

print(encrypt("hello"))

答案 5 :(得分:0)

def encrypt(string):
  return ''.join([encrypt_letter(letter) for letter in string])

输出:

uryyb