我需要编写相同的程序,但使用while循环而不是for循环

时间:2014-03-06 20:56:34

标签: python

这是原始代码:

def scrollList(myList):
    negativeIndices = []
    for i in range(0,len(myList)):
        if myList[i] < 0:
            negativeIndices.append(i)
    return negativeIndices

这是我到目前为止所得到的:

def scrollList2(myList):
    negativeIndices = []
    needMoreNumbers = True
    while (needMoreNumbers):
        if myList[i] < 0:
            negativeIndices.append(i)
        n = n-1
        if (n<1):
            needMoreNumbers = False
            return negativeIndices   

现在我收到错误“全局名称'我没有定义,我知道它不是,但我不知道如何在没有for循环的情况下定义'i'。谢谢

4 个答案:

答案 0 :(得分:1)

您在i上收到全局错误的原因是您没有在任何地方定义它。您必须定义您使用的内容。您还没有定义变量n。修好i后,你也会收到错误。

因此,在n循环前面定义while,如此

n = len(myList)
while(needsMoreStuff):

并将i的引用更改为

if myList[n] < 0:
  negativeIndices.append(n)

应该足以解决您的错误。

修改

建议使用不同的循环结构,然后对其进行编辑以更符合问题。问题是一个未声明的变量。

答案 1 :(得分:0)

只需使用计数器变量进行模拟:

def scrollList2(myList):
    negativeIndices = []
    counter = 0
    while (counter < len(myList)):
        if myList[counter] < 0:
            negativeIndices.append(counter)
        counter += 1

    return negativeIndices   

答案 2 :(得分:0)

好吧,你可以尝试手动进行索引。

def scrollList2(myList):
  negativeIndices = []
  index = 0
  while (index < len(myList)):
    if myList[index] < 0:
      negativeIndices.append(index)
    index+=1
  return negativeIndices

答案 3 :(得分:0)

pythonic答案是

indices = [i for i,n in enumerate(mylist) if n<0]

或使用()代替[]代替生成器(逐个动态生成它们)