首页 > 解决方案 > 将 C 程序“翻译”为 Python3 会产生意想不到的结果

问题描述

我在 c 方面有一些经验,但我对 python 还很陌生,所以我试图将我的一个程序从 c 移植到 python 以进行一些练习,但是虽然在我看来我使用的算法应该可以正常工作, python中的那个会产生错误的结果。我错过了什么?
这是C中的代码:

  int i1=0,j1=0;
  int counter=0;
  bool flag=true;
  z=0;
  for (int i=0; i<n; i++) {
    for (int j=0; j<m; j++) {
      i1=i;
      j1=j;
      z++;
      while (i1>=0 && i1<n && j1>=0 && j1<m && flag==true) {
        switch(a[i1][j1]) {
          case 'D':
            if (b[i1][j1]==z) { 
              flag=false;
              break;
            }
            b[i1][j1]=z;
            i1++;
            j1=j1;
            break;
          case 'U':
            if (b[i1][j1]==z) {
              flag=false;
              break;
            }
            b[i1][j1]=z;
            i1--;
            j1=j1;
            break;
          case 'L':
            if (b[i1][j1]==z) { 
              flag=false;
              break;
            }
            b[i1][j1]=z;
            i1=i1;
            j1--;
            break;
          case 'R': 
            if (b[i1][j1]==z) { 
              flag=false;
              break;
            }
            b[i1][j1]=z;
            i1=i1;
            j1++;
            break;
        }
      }
      if (flag==false) {
        counter++;
      }
      flag=true;
    }
  }

这是 Python 3 中的代码:

i1=0
j1=0
counter=0
flag=True
z=0    
for i in range(n):
    for j in range(m):
        i1=i
        j1=j
        z+=1
        while (i1>=0 and i1<n and j1>=0 and j1<m and flag==True):
            if (a[i1][j1]=='D'):
                if(b[i1][j1]==z):
                    flag=False
                    break
                elif (b[i1][j1]!=z):
                    b[i1][j1]=z
                    i1+=1
                    j1=j1
                    break
            if (a[i1][j1]=='U'):
                if(b[i1][j1]==z):
                    flag=False
                    break
                elif (b[i1][j1]!=z):
                    b[i1][j1]=z
                    i1-=1
                    j1=j1
                    break
            if (a[i1][j1]=='L'):
                if(b[i1][j1]==z):
                    flag=False
                    break
                elif (b[i1][j1]!=z):
                    b[i1][j1]=z
                    i1=i1
                    j1-=1
                    break
            if (a[i1][j1]=='R'):
                if(b[i1][j1]==z):
                    flag=False
                    break
                elif (b[i1][j1]!=z):
                    b[i1][j1]=z
                    i1=i1
                    j1+=1
                    break     
        if(flag==False):
            counter+=1
        flag=True

我没有包含完整的代码,但这是有问题的部分。请假设在这两种情况下都正确声明和初始化了数组。任何帮助表示赞赏。:)

标签: cpython-3.xalgorithmsyntax

解决方案


在您的 C 代码中,break;s 用于退出switch语句。

另一方面,breakPython 代码中的 s 表示退出while语句。

您应该删除所有breaks 以免意外退出循环。


推荐阅读