编辑:
我正在尝试针对允许的输入数组检查用户输入以获取if语句来执行,如果输入'y' or 'yes' or 1
代码将运行,这很简单,我想我使用了错误的结构。 :(
我有一段非常简单的代码,用于针对预定义数组中的多个可能条件运行用户输入:
from spiders import test
run_test_spider = 0
condition = [1, 'yes', 'Yes', 'YES', 'y', 'Y']
x=-1
def spiders():
for run_test_spider in condition:
global x
x=x+1
if run_test_spider == condition[x]:
test.main()
print 'gotcha!'
print 'running.......'
print run_test_spider
print 'hello'
print 'hello would you like to run a test spider?'
print '1,yes,y = Yes I do!!!'
print '0,no,n = Nope!'
run_test_spider = raw_input(': ')
spiders()
我在eclipse中运行调试器(pydev),一旦我输入字符串n
以获得失败的条件检查,调试器告诉我输入自动变为1
,这导致代码总是执行蜘蛛
有谁知道为什么我的输入都变为1
?
这个1
业务是eclipse在其变量字段中显示的内容,当我输入输入时(一旦我将调试器调到那一点)
控制台也吐出这个:当我在调试期间输入输入时:
Traceback (most recent call last):
File "C:\Program Files\eclipse\plugins\org.python.pydev.debug_2.5.0.2012040618\pysrc\pydevd_comm.py", line 755, in doIt
result = pydevd_vars.evaluateExpression(self.thread_id, self.frame_id, self.expression, self.doExec)
File "C:\Program Files\eclipse\plugins\org.python.pydev.debug_2.5.0.2012040618\pysrc\pydevd_vars.py", line 384, in evaluateExpression
result = eval(compiled, updated_globals, frame.f_locals)
File "<string>", line 1, in <module>
NameError: name 'n' is not defined
答案 0 :(得分:2)
for run_test_spider in condition:
表示将使用条件中的每个元素初始化run_test_spider。
因此,您实际上检查condition
中的每个项目是否都在其中......
condition = [1, 'yes' 'y']
def spiders():
if run_test_spider.lower() in condition:
test.main()
print 'gotcha!'
答案 1 :(得分:1)
您不会将用户的输入发送到您要使用它的命令。要使用它,请将run_test_spider作为spider命令的输入传递,并声明命令接受输入
不要在for循环中重新分配run_test_spider。
要方便地检查项目是否在列表中,您只需使用构造if a in b: <do something>
最后,正如@Tisho指出的那样,raw_input会返回一个字符串,因此请在代码中为1
添加一个字符串:'1'
因此,代码变为:
condition = ['1','yes','Yes','YES','y','Y']
def spider(run_test_spider):
if run_test_spider in conditions:
# do something
else:
# do something else
run_test_spider = raw_input(':')
spider(run_test_spider)