2013-12-21 213 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."