有人可以帮我把 **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

这应该可以解决您的问题,这是一个使用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

更改

for x in range(len(matrix1)):

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

干杯!

您可以转换:

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

最新更新