首页 > 解决方案 > 尝试确定列表的注入性时的无限循环

问题描述

对于学校作业,我们必须创建一个函数来确定列表是否是单射的,它返回 True 或 False。建议使用 2 种方法:使用“for”循环和使用“while”循环。我设法使用“for”循环进行编程,但我遇到了“while”循环的问题,因为我无法弄清楚为什么我的循环是无限的。

我将把我的代码放在下面。我已经尝试摆脱一些不必要的变量,并且当我在循环中修改“a”的值时,在我看来纸上没有任何问题。

def injective(x):  
      i=0
      k=i+1
      a=True
      while i<len(L)-1 :  #L is the name of the list
           while k<len(L) :
                if L[i]==L[k] :
                    a=False
                else :
                    a=True
                    i+=1
      return a

当列表是单射时,我希望得到 True ,当不是单射时得到 False

标签: pythonloops

解决方案


这是因为内部循环中 k 的值没有改变,我认为你在k+=1某个地方丢失了。

代码

def injective(x):  
  i=0
  k=i+1
  while i<len(L)-1 :  #L is the name of the list
       while k<len(L) :
            if L[i]==L[k] :
                return False
            k+=1
       i+=1
  return True

我冒昧地对代码进行了一些优化(对于非内射函数,它将大大减少您的迭代)。您可以在其他程序中使用相同的 for 循环。


推荐阅读