0

编辑:我正在尝试根据允许的输入数组检查用户输入以执行 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
4

2 回答 2

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!'
于 2012-06-28T16:45:25.157 回答
1
  1. 您不会将用户的输入发送到您要使用它的命令。要使用它,请将 run_test_spider 作为输入传递给蜘蛛命令,并声明命令接受输入

  2. 不要在 for 循环中重新分配 run_test_spider。

  3. 为了方便地检查项目是否在列表中,您可以简单地使用构造if a in b: <do something>

  4. 最后,正如@Tisho 所指出的, raw_input 返回一个字符串,所以1在你的代码中将它设为一个字符串:'1'

因此,代码变为:

条件 = ['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)
于 2012-06-28T16:47:36.437 回答