[英]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.