2013-12-11 226 views
0

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

代码

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' 

回答

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

print位于for循环内部;将其缩小一级,即

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

这将防止通过循环重复打印出来。此外,没有东西从你的函数return版,添加:

return result 

末(或补充或更换print)到您的输出发送到e

2

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

  1. 减缩print "".join(result)单层。

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

下面是完整的代码:

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 
1

的问题是,

print "".join(result) 

落在for循环。

0

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

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

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

输出:

uryyb