简体   繁体   中英

Can someone help me replace the **for loop** to **while loop** I'm struggling to figure it out?

Can someone help me replace the for loop to while loop I'm struggling to figure it out?

The question specifically asks us not to use for loop. That's why I need to replace it with the while loop

I have listed below:

  1. my code
  2. Sample testing of the input and the output
  3. the conditions we have to follow:
 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

Sample testing:

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

The conditions we have to follow:

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

This should solve your problem, this is a solution using while loop:

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

Change

for x in range(len(matrix1)):

to

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

Cheers!

You can transform:

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

into

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

so here you would get:

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

test it with

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) )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM