2013-05-09 84 views
2
def hotel_cost(nights): 
    return nights * 140 

bill = hotel_cost(5) 

def add_monthly_interest(balance): 
    return balance * (1 + (0.15/12)) 

def make_payment(payment, balance): 
    new_balance2 = balance - payment 
    new_balance = add_monthly_interest(new_balance2) 
    print "You still owe: " + str(new_balance) 

make_payment(100,bill) 

爲什麼這回爲什麼這會返回一個額外的沒有?

You still owe: 607.5 
None 

+1

你是如何運行程序? – squiguy 2013-05-09 22:59:01

+2

它不會返回。它返回'None',因爲如果你沒有'return'語句,那麼任何函數都會返回。並且它會打印出「您還欠:607.5」,因爲這就是您的'print'聲明中的內容。我的猜測是你正在IDE或其他交互式會話中運行,這會打印出每條語句的返回值。因此,您的代碼打印出「您還欠:607.5」,然後您的交互式解釋器打印「無」。 – abarnert 2013-05-09 22:59:25

+0

我幾天前開始學習,我正在代碼學院學習。所以它正在使用他們的翻譯。也許這是他們最終的問題? – user2368136 2013-05-09 23:00:08

回答

7

它不會返回。它返回None,因爲如果沒有返回語句,那麼這就是任何函數返回的結果。

同時,它會打印出「您還欠:607.5」,因爲這就是您的打印聲明中的內容。

(用「它」在這裏,我假設你指的是函數調用make_payment(100, bill)。)

我的猜測是你的IDE或其他交互式會話正在打印出來的返回值內運行的每個陳述。因此,您的代碼打印出「您還欠:607.5」,然後您的交互式解釋器打印「無」。

默認python交互式解釋器(如ipythonbpython和許多其他)將吞併None而不是將其打印出來。無論你使用哪種方法都不會那樣做。

+0

我並不是說聽起來很愚蠢,但是有什麼辦法通過我正在使用的inteactive IDE來解決這個問題嗎?我想將課程設置爲完整在線。如果不是,我只是繼續前進。 – user2368136 2013-05-09 23:02:22

+0

另外,感謝您的回答,它很好地解釋了這個問題。 – user2368136 2013-05-09 23:03:39

+0

@ user2368136:「修正」是什麼意思?你不希望互動口譯員停止互動;那會使它無用。如果他們有辦法編寫腳本並運行腳本,而不是在他們的交互式解釋器中工作,那麼您可能希望爲最終測試做好準備。 (我不知道他們是否有這樣的事情,這可能是CodeAcademy的問題,而不是SO,但也許這裏有人知道。) – abarnert 2013-05-09 23:07:18

0

這被評論@ abarnert的帖子中提到,但我把它放在答案的形式,以便更明顯。

你需要的是你的功能,在你回去會返回一個字符串,然後解釋會吐該字符串:

def make_payment(payment, balance): 
    new_balance2 = balance - payment 
    new_balance = add_monthly_interest(new_balance2) 
    return "You still owe: " + str(new_balance) # <-- Note the return 

# Now we change how we call this 
print make_payment(100,bill) 

# An alternative to the above 
message = make_payment(100,bill) 
print message 

現在,這將在命令行上顯示的唯一的事情會成爲消息。

注意

正如你以前寫的代碼(省略return語句)蟒蛇是假設你寫你的函數爲:

def make_payment(payment, balance): 
    new_balance2 = balance - payment 
    new_balance = add_monthly_interest(new_balance2) 
    print "You still owe: " + str(new_balance) 
    return None # <-- Python added this for you 

所有函數必須返回一個值,因爲你沒有包括return聲明python爲你添加了一個。由於看起來您的交互式shell正在打印到屏幕所有由python函數返回的值,因此在函數調用後您會看到None

相關問題