我目前正在做一个小宠物项目,我已经走到这一步,目前我的代码接受字符串,将字符串更改为相应的密码并显示它,但它显示整个迭代字符串。我做错了什么?我只想要翻译的字符串。
代码
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'
答案 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循环的每次迭代打印出列表。您需要做两件事来解决问题:
Dedent print "".join(result)
一个级别。
在该行中,将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
答案 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