我有一些python代码,translate_string方法返回正确的值nevmban
,但之后打印“无”。
def secret_translate(letter):
code = ord(letter)-ord('a')
code = (code+13)%26
newCode = chr(code+ord('a'))
return newCode
def translate_string(string):
newMsg = ''
i = 0
while i < (len(string)):
print(secret_translate(string[i]),end='')
i= i+1
print(translate_string("arizona"))
程序打印:
nevmbanNone
我希望它能打印nevmban
“无”来自何处?
答案 0 :(得分:4)
您正在打印translate_string
函数的结果,即[{1}},因为没有明确的None
声明。
答案 1 :(得分:1)
当您调用这样的打印方法时:
print(underground_code(secret[i]),end='')
您只在函数中传递一个字符而不是整个字符串。它将继续检查while循环中的第一个字符:
while i < (len(secret)):
以上while
只会运行一次。下一个函数调用len(secret)
将为1。
*当然,如果这是你想要的,请忽略我说的话。
答案 2 :(得分:1)
请注意,如果您有翻译表,则实际上不需要实现翻译机制。你在string
内置了它们:
import string
fromlist="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
tolist = "cdefghijklmnopqrstuvwxyzab"
transtable = string.maketrans(fromlist, tolist)
mycypertext="FCJJM UMPJB"
print string.translate(mycyphertext, transtable) #will print hello world
答案 3 :(得分:0)
您可以随时打印翻译单词的字母,我建议您从函数中返回翻译后的单词。您在翻译后的单词后面看到“无”的事实是因为在打印单词的函数内部,在函数外部打印函数的结果。该函数没有结果(没有return
语句),默认值为None。打印此选项会导致在函数内已打印的字符串末尾附加无。
我建议像这样重组translate_string
:
def translate_string(string):
translated_letters = [secret_translate(letter) for letter in string]
return("".join(translated_letters))
trans_string = translate_string("arizona")
print(trans_string)
'nevmban'
此解决方案使用列表推导来循环输入字符串的字母,不需要带有计数器的显式循环。列表理解非常好,他们确实需要一些习惯。此外,该函数现在返回字符串,而不是在函数内打印它。 “无”已消失,您可以在程序中进一步使用已翻译的字符串,例如作为另一个函数的输入。