调用正确的函数

时间:2015-07-24 15:42:09

标签: python

我的代码如下:

def pStockName():

        global StockList,fStockList
        fStockList = []
        pStockList = []
        StockList = str(raw_input('Enter pipe separated list of StockS : ')).upper().strip()
        items = StockList.split("|")
        count = len(items)
        print  'Total Distint Stock Count : ',  count
        items = list(set(StockList.split("|")))
        pipelst = [i.replace('-mc','').replace('-MC','').replace('$','').replace('^','') for i in items]
        filepath = '/fsnadmin/SAAS_SUPPORT/Stock_data.txt'
        f = open(filepath, 'r')
        for lns in f:
                split_pipe = lns.split(':', 1)
                if split_pipe[0] in pipelst:
                        index = pipelst.index(split_pipe[0])
                        pStockList=split_pipe[0]+"|"
                        fStockList.append(pStockList)
                        del pipelst[index]

        for lns in pipelst:
                print bcolors.red + lns,' is not found in SaaS Stock Inventory' + bcolors.ENDC
         if pipelst:
        #if not lns:
                uResp = str(raw_input('Do You Want To Continue with option 0 [YES|Y|NO|N] : ')).upper().strip()
                if uResp == "YES" or uResp == "Y":
                        pStockName ()
                else:
                        #StockList = None
                        print_menu ()
        f.close()

当我执行此代码时,它会提示我编写股票清单,如果我给出所有正确的股票(在/location/stock_data.txt中提到,在上面的代码中调用),它会正确执行,如下所示:

  

输入管道分隔的StockS列表:aaa | hfa | fff

     

Total Distint Stock Count:3

     

属于其他中心的股票:

     

其他股票数量= 0

     

属于现有中心的股票:

     

US1中的活跃股票:

     

^ AAA $ | ^ HFA $

     

US2终止股票:

     

^ FFF $

     

从当前中心忽略的库存数量= 1

     

您已输入属于此中心的StockList:^ AAA $ | ^ HFA $

     

有效库存数量:2

     

您想继续[YES | Y | NO | N]:

如果提供所有错误的库存(如果在/location/stock_data.txt文件中不可用)并执行上面的代码,则会得到如下结果:

  

输入您的选择[0-26]:0

     

输入管道分隔的StockS列表:jjj | uuu | oo

     

Total Distint Stock Count:3

     

在库存清单中找不到UUU

     

在库存中找不到OO

     

JJJ未在库存中找到

     

是否要继续选项0 [是|是|否| N]:是

     

输入管道分隔的股票清单:

到目前为止,我正在按需要获得结果。但是,如果我在正确的股票之间给出任何错误的股票,它不再要求输入股票的分隔列表,尽管它执行如下:

  

输入管道分隔的StockS列表:aaa | hfa | ooo

     

Total Distint Stock Count:3

     在库存清单中找不到

OOO

     

属于其他数据中心的股票:

     

其他中心的库存数量= 0

     

属于当前数据中心的股票:

     

US1中的活跃股票:

     

^ AAA $ | ^ HFA $

     

从当前中心忽略的库存数量= 0

     

您已输入属于此中心的StockList:^ AAA $ | ^ HFA $

     

有效库存数量:2

     

您想继续[YES | Y | NO | N]:

正如您在上述声明中看到的那样,在使用正确的股票执行该代码之后,我得到错误的股票信息(在股票清单中找不到OOO)。 我想要的是,如果我提供任何错误的股票,它应该在给出错误的股票信息后不应该继续,之后它应该再次询问输入管道分离的股票列表后给出选项Y(是),就像当我提供所有错误的股票时,我收到了声明。

请让我知道如何实现这一目标。

请查看以下执行

  

输入您的选择[0-26]:0

     

输入管道分隔的StockS列表:aaa | hfa | kk

     

Total Distint Stock Count:3

     

库存中找不到KK

     

是否要继续选项0 [是|是|否| N]:是

     

输入管道分隔的StockS列表:aaa | hfa

     

Total Distint Stock Count:2

     

属于其他中心的股票:

     

其他中心的库存数量= 0

     

属于现有中心的股票:

     

US1中的活跃股票:

     

^ AAA $ | ^ HFA $

     

从当前中心忽略的库存数量= 0

     

您已输入属于此中心的StockList:^ AAA $ | ^ HFA $

     

有效库存数量:2

     

您想继续[YES | Y | NO | N]:Y

     

属于其他中心的股票:

     

其他中心的库存数量= 0

     

属于现有中心的股票:

     

US1中的活跃股票:

     

^ AAA $ | ^ HFA $

     

从当前中心忽略的库存数量= 0

     

您已输入属于此中心的StockList:^ AAA $ | ^ HFA $

     

有效库存数量:2

     

您想继续[YES | Y | NO | N]:

1 个答案:

答案 0 :(得分:0)

似乎你想要:

if pipelst: #if pipelst is not empty

而不是

if not lns:

第一个将检查pipelst是否包含元素,而第二个将执行其他操作。 (我认为它将检查前一个for each语句中迭代的最后一个元素是否为0 /空,但不确定。)

如果您想在单个股票无效时输入此if,并且pipelst此时似乎包含所有无效股票,请检查pipelst是否为空或看起来不是一个好选择。