mwpython 发表于 2022-10-27 14:46:33

为什么PyCharm 里输入的结果与 IDLE 输入的结果不一样

#数据转换类型
a = "520"
b = int(a)
print(a,b)

注:a是字符串,为什么PyCharm 与IDLE 里显示的结果是不一样的呢?

好纠结 在这种入门的阶段 我在迷茫 到底是用 PyCharm 来学习还是IDLE来学习。有高手指点迷津吗?

jackz007 发表于 2022-10-27 15:06:53

a = "520"
b = int(a)
print(a,b)
      就这 3 句代码在 IDLE 和 Pycharm 中会不一样?
      能不能把两个不一样的结果都贴出来,让大家一起看看。

mwpython 发表于 2022-10-27 15:38:20

你们遇到这个问题吗?

本帖最后由 mwpython 于 2022-10-27 15:39 编辑

http://gfd621.bvimg.com/18517/1ba5d94deac808b4.pngPyCharm里输出的结果是两个520整数

http://gfd621.bvimg.com/18517/7ddf3d19ee8c29a7.png IDEL输出的结果是"520"字符串 ,一个是520整数

wp231957 发表于 2022-10-27 15:42:40

mwpython 发表于 2022-10-27 15:38
PyCharm里输出的结果是两个520整数

IDEL输出的结果是"520"字符串 ,一个是520整数

你是说一个520有引号?一个没有??
你贴这俩图是一个图
而且这是正常的,显示问题,不是问题

mwpython 发表于 2022-10-27 15:43:32

本帖最后由 mwpython 于 2022-10-27 15:47 编辑

wp231957 发表于 2022-10-27 15:42
你是说一个520有引号?一个没有??
你贴这俩图是一个图
而且这是正常的,显示问题,不是问题

是的一个有引号 一个没有引号。虽然是没什么多大问题。我是想知道原因!我遇到问题爱问。。。

mwpython 发表于 2022-10-27 15:54:36

jackz007 发表于 2022-10-27 15:06
就这 3 句代码在 IDLE 和 Pycharm 中会不一样?
      能不能把两个不一样的结果都贴出来,让 ...

老师 贴图已经贴出来 能解释一下什么原因吗?我用IDLE 学得有点不习惯

jackz007 发表于 2022-10-27 16:11:26

mwpython 发表于 2022-10-27 15:54
老师 贴图已经贴出来 能解释一下什么原因吗?我用IDLE 学得有点不习惯

      你得看他们实际运行代码文件 print() 的输出的内容存在什么差别,你在 IDLE 中操作的方式是在查询变量,当你在 IDLE 中输入一个标识符时,你所看到的,是 IDLE 回应的变量类型及其内容,和执行 print() 的打印结果完全是两回事。

wp231957 发表于 2022-10-27 16:13:18

mwpython 发表于 2022-10-27 15:43
是的一个有引号 一个没有引号。虽然是没什么多大问题。我是想知道原因!我遇到问题爱问。。。

都说了是显示问题
正常显示我们是无法区分哪个是字符串,哪个是整数!因为看起来都是一样的,只不过在python的shell环境下,特意添加了引号而已

tommyyu 发表于 2022-10-27 16:17:23

本帖最后由 tommyyu 于 2022-10-27 16:22 编辑

我感觉通俗一点说,就是第二个没有加print

圈黑圈的两个地方,第一个是 print(a, b),第二个是 a, b

jackz007 发表于 2022-10-27 16:24:16

本帖最后由 jackz007 于 2022-10-27 16:26 编辑

mwpython 发表于 2022-10-27 15:54
老师 贴图已经贴出来 能解释一下什么原因吗?我用IDLE 学得有点不习惯

>>> a = "520"
>>> b = int(a)
>>> print(a,b)      <--- 这个是用 print() 函数打印
520 520               <--- 这个是 print() 函数的打印结果
>>> a,b               <--- 这个是用 IDLE 环境在查询标识符
('520', 520)          <--- 这个是 IDLE 对标识符查询所回应的变量信息
>>>

kogawananari 发表于 2022-10-28 13:56:51

print调用str魔术方法 元组成员调用repr魔术方法 和pycharm又或者idle无关

你可以print((a, b))

阿奇_o 发表于 2022-10-28 15:20:21

本帖最后由 阿奇_o 于 2022-10-28 15:44 编辑

kogawananari 发表于 2022-10-28 13:56
print调用str魔术方法 元组成员调用repr魔术方法 和pycharm又或者idle无关

你可以print((a, b))

准确点,不是元组成员,而是 元组本身。

其实这里的关键是:在 IDLE里,它会把 a,b 当做了 一个元组tuple

而IDLE的“回显逻辑”是:
obj+回车 等于 输出repr(obj)即obj.__repr__()的返回   # 这里的obj 就是 元组(a,b)
而print(obj) 始终等于 print(obj.__str__())或 print(str(obj)) 。
print(a, b) 则是另一回事了,分别打印两个不同的变量对象了,当然调用的还是对象的__str__,只是最终呈现到屏幕是,都是 520 520

>>>('520', 520)
('520', 520)
>>>('520', 520).__repr__()
"('520', 520)"
>>>('520', 520).__str__()      
"('520', 520)"
# 元组的__str__和__repr__方法的返回是一样的(但大多数的其他对象,它们的返回是不一样。不过完全取决于你怎么定义它们)

>>>print(('520', 520).__str__())
('520', 520)
>>>print('520', 520)   # 注意区别这两个print内的 参数的不同
520 520

ps: 对于人类人眼,我们通常只看“表像”,只看“符号” 。但对于计算机,为了效率等原因,它需要严格区分0和1,只是为了和人进行交互,它不得不转为我们熟悉的字符串——符号而已,表象而已。。
计算机则要区分由0和1不同进制化形成的数值类型(二进制、十进制、十六进制等),以及 由0和1字节码编码而成的 字符类型(不同的字符集,ascii,gbk,utf8等等)

Twilight6 发表于 2022-11-2 13:38:17


你一个代码是使用 print 函数,而另一个代码直接 a, b 在控制台输出,效果当然不同

如果你使用的都是 print(a, b) 那么效果肯定都是没带引号的 520

你在 PyCharm 的 Python 控制台那也使用 a, b 的方式直接输出,也能得到一个带 " 引号的 520 和 一个没带引号的 520

a, b 这样书写方式是表示一个元组,而 print(a, b) 是将 a和b 变量传入了 print 函数的参数中,依次打印到屏幕上

另外你说你纠结到底使用 PyCharm 还是 IDLE,我觉得你哪个用的顺手就可以用哪个进行学习,但是我建议是入门先 IDLE,熟悉 Python 大多数关键字之后再使用 PyCharm 吧

mwpython 发表于 2022-11-12 18:56:25

Twilight6 发表于 2022-11-2 13:38
你一个代码是使用 print 函数,而另一个代码直接 a, b 在控制台输出,效果当然不同

如果你使用的都是...

谢谢前辈,我明白了。b = int(a) #意思是 b=整数与字符串转换了。
页: [1]
查看完整版本: 为什么PyCharm 里输入的结果与 IDLE 输入的结果不一样