专栏名称: 吴师兄学算法
和程序员小吴一起从初学者的角度学习算法,以动画的形式呈现解题的思路。每周四篇原创文章,期待你的鉴赏!
目录
51好读  ›  专栏  ›  吴师兄学算法

为什么在 PyCharm和 LC 里面跑出来的结果不一样?

吴师兄学算法  · 公众号  ·  · 2024-06-11 15:41

正文

大家好,我是吴师兄。

今天下午有个同学在群里提了一个问题 请问一下为什么在pycharm和lc里面跑出来的结果不一样呀

截图如下,一个是 PyCharm 输出的结果。

另外一个是在 LeetCode 上输出的结果。

都是运行同样的代码。

class Solution:
    def evalRPN(self, tokens: List[str]) -> int:
        # 使用一个列表作为栈,存储操作数,从左到右遍历逆波兰表达式
        result = []

        # 遍历字符串数组
        for token in tokens:
            # 如果是运算符
            if token in "+-*/":
                # 先出栈的是右操作数
                rightNum = result.pop()
                # 后出栈的是左操作数
                leftNum = result.pop()
                # 计算结果
                if token == "+":
                    ans = leftNum + rightNum
                elif token == "-":
                    ans = leftNum - rightNum
                elif token == "*":
                    ans = leftNum * rightNum
                elif token == "/":
                    ans = int(leftNum / rightNum)
            else:
                # 转换为数字
                ans = int(token)

            # 存储结果
            result.append(ans)

        # 返回栈顶元素
        return result[-1]

得到的是两个不同的结果。

如果学过 Python 的程序员肯定可以第一时间得出答案: 问题是两者的不同编译环境导致

这段代码在 Python2 和 Python3 中的表现不同,主要原因在于除法操作符 / 的行为差异。在 Python2 中,整数除法使用 / 时会执行整数除法,而在 Python3 中, / 会执行浮点数除法, // 则用于整数除法

代码中这部分:

elif token == "/":
    ans = int(leftNum / rightNum)

在 Python2 和 Python3 中的行为不同:

  1. Python2 :
  • leftNum / rightNum 会执行整数除法,如果 leftNum rightNum 都是整数,结果也是整数。
  • int(leftNum / rightNum) 相当于对结果再执行一次整数转换,但由于结果已经是整数,实际上不会改变值。
  • Python3 :
    • leftNum / rightNum 会执行浮点数除法,结果是浮点数。
    • int(leftNum / rightNum) 会将浮点数结果转换为整数,这相当于向下取整(截断小数部分)。

    这就导致了在 Python2 和 Python3 中,除法运算的结果可能不同。要在两个版本中得到一致的行为,可以使用 Python3 的整数除法操作符 //

    所以只需要把 PyCharm 里面的语言设置为 Python3 , 问题得到解决


    经过 4 年时间的迭代,和付费学员们真金白银的支持和反馈后,课程愈发的体系化。

    目前大厂算法训练营涵盖如下内容:

    0、20 小时的 Python 入门视频课,搭配 4w 字的文档,从搭配环境到 Python 语法内容

    1、20 节的基础数据结构动画视频课

    2、300 道左右的 LeetCode 动画视频讲解

    3、150 道左右的各个互联网大厂笔试真题文字讲解和录播讲解

    4、300 道左右的华为 OD 机试真题文字讲解和录播讲解,每周新增 4 题

    5、250 场左右的答疑直播课,每周新增一场

    结合训练营的内容,星球会提供如下的资源进行学习,相当于是一个缩小版的算法训练营:

    0、20 小时的 Python 入门视频课,搭配 4w 字的文档,从搭配环境到 Python 语法内容

    1、100 道 LeetCode 算法动画视频讲解,每个视频时长 10 分钟左右,持续更新







    请到「今天看啥」查看全文