Python:打印函数的结果返回“None”

时间:2012-09-27 05:53:17

标签: python debugging loops

我有一些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“无”来自何处?

4 个答案:

答案 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'

此解决方案使用列表推导来循环输入字符串的字母,不需要带有计数器的显式循环。列表理解非常好,他们确实需要一些习惯。此外,该函数现在返回字符串,而不是在函数内打印它。 “无”已消失,您可以在程序中进一步使用已翻译的字符串,例如作为另一个函数的输入。