【问题标题】:Can someone help me replace the **for loop** to **while loop** I'm struggling to figure it out?有人可以帮我将 **for 循环** 替换为 **while 循环** 我正在努力弄清楚吗?
【发布时间】:2021-03-29 14:20:32
【问题描述】:

有人可以帮我将 for 循环 替换为 while 循环吗?

这个问题特别要求我们不要使用 for 循环。这就是为什么我需要将其替换为 while 循环

我在下面列出:

  1. 我的代码
  2. 输入输出的示例测试
  3. 我们必须遵守的条件:
 def matrix_equal(matrix1, matrix2):
    """
    -------------------------------------------------------
    Compares two matrices to see if they are equal - i.e. have the
    same contents in the same locations.
    Use: equal = matrix_equal(matrix1, matrix2)
    -------------------------------------------------------
    Parameters:
        matrix1 - the first matrix (2D list of ?)
        matrix2 - the second matrix (2D list of ?)
    Returns:
        equal - True if matrix1 and matrix2 are equal,
            False otherwise (boolean)
    ------------------------------------------------------
    """
    equal = True
    if((len(matrix1) != len(matrix2)) or (len(matrix1[0]) != len(matrix2[0]))):
        equal = False
    for x in range(len(matrix1)):
        if(equal == False):
            break
        for y in range(len(matrix1[0])):
            num1 = matrix1[x][y]
            num2 = matrix2[x][y]
            if(num1 != num2):
                equal = False
                break
    return equal

样本测试:

First matrix:
      0    1    2
 0    c    a    t
 1    d    o    g
 2    b    i    g

Second matrix:
      0    1    2
 0    c    a    t
 1    d    o    g
 2    b    i    g

Equal matrices: True

我们必须遵守的条件:

1. should not call input in the function
2. should not call print in the function
3. should not have multiple returns

【问题讨论】:

  • 这看起来像作业,所以我不想发布更完整的解决方案。但这是一般的想法。 for 负责创建预定义的迭代器并迭代其中的项目。 while 是“哑巴”,它只检查逻辑条件,并且会一直循环直到条件失败。它不会创建项目的迭代器,也不会自动前进到下一个项目。您必须手动完成所有这些操作,包括确保您使用的条件最终将评估为 False,否则您将获得无限循环。

标签: python computer-science


【解决方案1】:

这应该可以解决您的问题,这是使用 while 循环的解决方案:

def matrix_equal(mat1,mat2):
  equal = True
  if(len(mat1[0]) == len(mat2[0]) and len(mat1) == len(mat2)):
    i = 0
    n = len(mat1[0])
    m = len(mat1)
    while(i < m):
      j = 0
      while(j < n):
        if(mat1[i][j] != mat2[i][j]):
          equal = False
          break
        j+=1
      if(equal==False):
        break
      i+=1
  else:
        equal = False
  return equal

【讨论】:

    【解决方案2】:

    改变

    for x in range(len(matrix1)):
    

    x = 0
    while x < len(matrix1):
        x += 1
    

    干杯!

    【讨论】:

      【解决方案3】:

      你可以变换:

      for i in range(mat.shape[0]):
        {do stuff...}
      

      进入

      i = 0
      while i < mat.shape[0]:
        {do stuff...}
        # increment i with 1
        i += 1
      

      所以在这里你会得到:

      def mat_eq_while(matrix1, matrix2):
        i = 0
        j = 0
        equal = True
        if(not (mat1.shape == mat2.shape) ):
            equal = False
        while i < mat1.shape[0]:
            if(equal == False):
                break
            while j < mat1.shape[1]:
                num1 = matrix1[i, j]
                num2 = matrix2[i, j]
                if(num1 != num2):
                    equal = False
                    break
                j += 1
            i += 1
        return equal
      

      测试一下

      import numpy as np
      mat1 = np.matrix(range(9)).reshape(3,3)
      mat2 = np.matrix(range(1, 10)).reshape(3,3)
      
      print( mat_eq_while(mat1, mat1) )
      print( mat_eq_while(mat1, mat2) )
      

      【讨论】:

        猜你喜欢
        • 2021-02-12
        • 2021-08-30
        • 2017-06-12
        • 2020-07-22
        • 1970-01-01
        • 1970-01-01
        • 2014-04-29
        • 1970-01-01
        • 2021-01-06
        相关资源
        最近更新 更多