簡體   English   中英

Python:打印函數結果將返回“ None”

[英]Python: Printing the result of a function returns “None”

我有一些python代碼,translate_string方法返回正確的值nevmban但隨后它顯示“ None”。

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 “無”來自哪里?

由於沒有顯式的return語句,因此您正在打印translate_string函數的結果,即None

當您像這樣調用print方法時:

print(underground_code(secret[i]),end='')

您只在函數中傳遞了一個字符,而不是整個字符串。 它將繼續檢查while循環中的第一個字符:

while i < (len(secret)):

上面的while將只運行一次。 下一個調用您的len(secret)函數將為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

您可以隨時打印已翻譯單詞的字母,我建議您從函數中返回已翻譯單詞。 之所以看到“已翻譯”字詞后面顯示“無”,是因為您在該函數內部打印了該單詞,而在函數外部打印了該函數的結果。 該函數沒有結果(沒有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'

此解決方案使用列表推導來循環輸入字符串的字母,而無需使用計數器的顯式循環。 列表理解非常好,他們確實需要一些習慣。 另外,該函數現在返回字符串,而不是在函數內部打印它。 None消失了,您可以在程序中進一步使用轉換后的字符串,例如,作為另一個函數的輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM