【问题标题】:Why does the same logical equation return 2 different results in python and c++?为什么相同的逻辑方程在 python 和 c++ 中返回 2 个不同的结果?
【发布时间】:2019-10-28 16:39:59
【问题描述】:

我在python上做了一个原型代码,看看逻辑是否有效,后来用c++编码。但由于某种原因,python 版本和 c++ 版本返回不同的结果。我无法弄清楚为什么会这样。

我多次检查了这个特殊的逻辑方程,并确保它们完全相同,不包括 (or,||) 和 (and,&&) 之类的差异。

蟒蛇

i = -6
j = -5
pos_i = 0
pos_j = 0
print((i%2==0)and((((i/2)%2==0)and(j%2==0))or(((i/2)%2==1)and(j%2==1))))

c++

int i = -6;
int j = -5;
int pos_i = 0;
int pos_j = 0;
cout << (i%2==0)&&((((i/2)%2==0)&&(j%2==0))||(((i/2)%2==1)&&(j%2==1)));

预期:-

python===> 是的

c++=====> 1

实际:-

python===> 是的

c++=====> 0

【问题讨论】:

  • 您是否进行了调试以找出结果开始不同的地方?
  • 我很抱歉这是我的一个错误。我刚学了 python,忘记了 i/2 是一个浮点数
  • 您从 C++ 中得到 0 的输出?我复制并粘贴了您的代码并得到1

标签: python c++ compare logical-operators


【解决方案1】:

因为在 c++ 中i / 2 变成了一个整数,而在 python 中它变成了一个浮点数。从那里你正在用不同的值做逻辑。如果你想要同样的,你应该使用

    print((i%2==0)and((((i//2)%2==0)and(j%2==0))or(((i//2)%2==1)and(j%2==1))))

【讨论】:

  • 对于 i 和 j 的不同值,您是正确的,但这不是 C++ 版本给出意外结果的原因。 -1 % 2 在 C++ 中返回 -1,但在 python 中返回 1。
【解决方案2】:

关于整数除法的另一个答案是正确的,但这不是这里的问题。这里发生的唯一除法是 -6 除以 2,因此使用整数除法运算符 // 不会改变结果。

正确答案是模运算符在 Python 和 C++ 中的工作方式不同:Link。

与 C 或 C++ 不同,Python 的模运算符 (%) 总是返回一个与分母(除数)具有相同符号的数字。

-1 % 2 在 C++ 中将产生 -1,而不是您期望的 1。

【讨论】:

    猜你喜欢
    • 2017-04-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2018-03-11
    • 1970-01-01
    • 2016-05-11
    相关资源
    最近更新 更多