Python 遍历列表
我目前正在做一个小的pet项目,我已经做了这么多,目前我的代码接受字符串,将字符串更改为相应的密码并显示它,但它显示整个迭代字符串。我做错了什么?我只需要翻译的字符串 代码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'
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循环每次迭代的列表。要解决此问题,您需要做两件事:
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"))
输出: