我已经将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 :(得分: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."
答案 1 :(得分:1)
您在最后一行引用s
:
contains(s, sub)
这是函数的外部,并且您没有定义全局s
。 s
仅作为函数内部的本地名称存在。这同样适用于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."
并且该函数仍将s
和sub
用作本地名称。
答案 2 :(得分:0)
在这里的代码中
if __name__ == '__main__':
contains(s, sub)
您尚未将s
定义为变量。
在使用s
的引用致电contains
之前,您应该将s
定义为主要功能中的列表。
s
函数和main
函数中变量contains
之间的差异在于它们完全是两个不同的变量。您可能想要查看parameter是什么