2015-02-09 49 views
0

當我在解釋器中運行這些命令時,我得到了我想要的結果。但是,當我嘗試使用.py文件運行它時,我沒有。林新編碼和我的大腦我不明白爲什麼這個代碼不起作用。如果語句在def中工作,但不在解釋器中,會出問題

在解釋

>>> a = 'This dinner is not that bad!' 
>>> n = a.find('not') 
>>> b = a.find('bad') 
>>> if n < b: 
     a.replace(a[n:], 'good') 
'This dinner is good' 

這是我想要的結果。

當我運行這段代碼時,我沒有得到我想要的結果。我做錯了什麼,爲什麼這個代碼不起作用?

def test(s): 
    n = s.find('not') 
    b = s.find('bad') 

    if n < b: 
    s.replace(s[n:], 'good') 
print test('This dinner is not that bad!') 

這是一個練習,從谷歌介紹到Python課程。我從這個例子中得到了正確的答案,並且理解這是如何工作的。我只是不知道爲什麼我的代碼不工作。

感謝您的幫助。

回答

4
def test(s): 
    n = s.find('not') 
    b = s.find('bad') 

    if n < b: 
    return s.replace(s[n:], 'good') 
print test('This dinner is not that bad!') 

您應該return函數test的結果。

+0

完美!謝謝......我剛剛在s.replace之後做了返回,它給了我相同的str。感謝您的幫助 – jojonac 2015-02-09 01:47:05

1

因爲在功能版本,你會得到None爲默認值,你沒有返回值:

def test(s): 
    n = s.find('not') 
    b = s.find('bad') 
    return_res = '' 

    if n < b: 
    return_res = s.replace(s[n:], 'good') 

    return return_res 

print test('This dinner is not that bad!') 

輸出:

This dinner is good 

,或者不使用return_res

def test(s): 
    n = s.find('not') 
    b = s.find('bad') 

    if n < b: 
    return s.replace(s[n:], 'good') 

    return "something else" 

print test('This dinner is not that bad!') 
+0

謝謝!這非常有幫助 – jojonac 2015-02-09 01:47:35

0

大多數(或所有?)IDE中的解釋器,如果我沒有弄錯(我執行我的代碼使用Sublime,它會在執行時保存並運行文件),您會自動打印上一個表達式的結果,從而給您帶來Python代碼以這種方式行爲的錯誤印象。它沒有。

換句話說:您的代碼在解釋器和文件中的工作原理都是一樣的。你所面臨的問題是一種誤解,即代碼在解釋器中做了一些不同的事情。真正發生的是,在這兩個代碼段中,你實際上是否會捕獲結果並將其打印出來;在解釋器的情況下,它會自動打印它作爲視覺輔助的一種,但是你不能依賴它。

在你的第二個片段,你會寫:

return s.replace(s[n:], 'good') 

注意使用在這種情況下回報。在你的第一個例子中,應該捕捉它或至少顯式地打印結果。但因爲它不是在一個封閉的作用,相當於將是:

if n < b: 
    print a.replace(a[n:], 'good') 

或:

if n < b: 
    newString = a.replace(a[n:], 'good') 

print newString 
+0

感謝您的詳細回覆!我清楚地知道我錯過了什麼。謝謝 – jojonac 2015-02-09 01:49:23

相關問題