2013-12-21 234 views
0

我已經將s定義爲一個列表,但是當我運行該模塊時,它說s未定義。錯誤:未定義名稱'

def contains(s, sub): 
    s = ["apples", "bananas", "oranges", "watermelon", "apricots"] 

    sub = raw_input("Please enter a substring of s: ") 

    if sub in s: 
     print sub, "is a substring of s." 
     return True 

if __name__ == '__main__': 
    contains(s, sub) 
+0

我真的很喜歡那些問題。他們是免費的幸運點。男人,你應該問我之前先郵寄給我,我會很樂意回答。 – MadeOfAir

回答

1

您在最後一行引用s

contains(s, sub) 

這是之外的功能,而你沒有定義一個全局ss只存在的本地名稱的功能。這同樣適用於sub

移到列表的定義和sub至該節:

def contains(s, sub): 
    if sub in s: 
     print sub, "is a substring of s." 
     return True 

if __name__ == '__main__': 
    s = ["apples", "bananas", "oranges", "watermelon", "apricots"] 
    sub = raw_input("Please enter a substring of s: ") 
    contains(s, sub) 

你可以過使用不同的名稱和離開打印功能之外:

def contains(s, sub): 
    return sub in s 

if __name__ == '__main__': 
    fruits = ["apples", "bananas", "oranges", "watermelon", "apricots"] 
    substring = raw_input("Please enter a substring of fruits: ") 
    if contains(fruits, substring): 
     print substring, "is a substring of fruits." 

和功能仍然會作爲本地名稱使用ssub

0

在一段代碼在這裏

if __name__ == '__main__': 
    contains(s, sub) 

您還沒有定義s爲一個變量。

在使用參考s調用contains之前,您應該在主函數中將s定義爲一個列表。

函數main函數中的變量s與函數contains之間的差異在於它們完全是兩個不同的變量。您可能要檢查parameter是什麼

+0

謝謝。這解決了問題。 – PhysicsLemur

2

s僅在函數contains內定義。 s被綁定到傳遞給函數的參數。換句話說,你正在錯誤地調用這個函數。你可能想這樣做:

def contains(s, sub): 
    return sub in s 

if __name__ == '__main__': 
    s = ["apples", "bananas", "oranges", "watermelon", "apricots"] 
    sub = raw_input("Please enter a substring of s: ") 
    if contains(s, sub): 
     print sub, "is a substring of s."