c - 将 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
我没有包含完整的代码,但这是有问题的部分。请假设在这两种情况下都正确声明和初始化了数组。任何帮助表示赞赏。:)
解决方案
在您的 C 代码中,break;
s 用于退出switch
语句。
另一方面,break
Python 代码中的 s 表示退出while
语句。
您应该删除所有break
s 以免意外退出循环。
推荐阅读
- java - 如何为无限运行(无限循环)的 Spring Boot 应用程序生成 Jar 文件?
- android - 如何更改菜单图标 onMessageReceived
- bash - Bash:直接执行命令和执行存储在字符串中的相同命令时看到的差异
- javafx - 将 TextField 绑定到 ListView 项
- julia - Julia中单次使用的快速矩阵向量乘法
- sympy - 使用 colaboratory 进行 Sympy 打印
- react-native - React Native Router Flux 不传递道具
- c# - C# - 如何使用引用创建 nuget 包
- excel - 用于比较值的 Excel 宏
- chilkat - 是否可以在线程中终止 SynchronousRequest?