设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 27731|回复: 10
打印 上一主题 下一主题

【Python 第63课】python 2到3的新手坑

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2013-12-14 17:31:03 |只看该作者 |倒序浏览
py63h.jpg

昨天挖了个坑,论坛上已经有不少解答了,还有c语言的版本。今天先不填坑,让题目再飞一会儿,没做的同学可以周末试着写写玩儿。

周三的时候去参加“编程一小时”活动,过程中发现,python版本2和版本3之间一些小改动把很多人都给坑了,花了大量的时间在这件事情上。所以今天来讲一下最大的两个坑:print 和 input。

我们在课程最开始的时候就讲过 print,在版本2的使用方法是:
print 'this is version 2'

也可以是
print('this is version 2')

但到了3,就只能加上括号,像一个函数一样来使用 print:

print('this is version 3')

假如你看了基于2的教程(比如我写的),然后又装了python 3,可能就会奇怪为什么完全照着写,结果却不一样。


而 input 就更绕一点。2里面有两个用来从命令行接受输入的函数:input 和 raw_input。

value = input()

input 接收的是一个值或变量,也就是说,你如果输 123,程序接收到的就是整数 123,你输 True,就是 bool 值 True。如果你输了 abc,程序会认为这是一个叫做 abc 的变量,而假如你没有定义过这个变量,就会报错。

所以,当你想用 input 得到一段文字的话,必须把文字写在引号 "" 或 '' 中。

text = raw_input()

raw_input 接收的则是你输入的字符串,而不管你输的是什么内容。

在版本3里,为了减少混乱,这两种输入方式被合并了。只是合并的方式又坑了新手:它保留了 input 这个名字和 raw_input 的效果。3里只有input函数,它接收你输入的字符串,不管你输的是什么。

text = input()

这种情况下,不管你是看着3的教材用2,还是看着2的教材用3,都会踩到这个坑。

那么在3里,如何像2一样得到用户输入的一个值呢?方法是 eval():

value = eval(input())


#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

47

积分

新手上路

Rank: 1

沙发
发表于 2013-12-14 20:16:07 |只看该作者

回帖奖励 +5

果然是和坑
回复

使用道具 举报

0

主题

0

好友

18

积分

新手上路

Rank: 1

板凳
发表于 2013-12-17 20:49:58 |只看该作者

回帖奖励 +5

好久没用python了,今天重新下了个3.3.3,实在是个大坑
回复

使用道具 举报

0

主题

0

好友

9

积分

新手上路

Rank: 1

地板
发表于 2013-12-19 16:20:59 |只看该作者

回帖奖励 +5

python 2.x系列也是到了2.4 2.5才进入稳定期的

软件无需太新, 一直坚持2.x用用也不差
回复

使用道具 举报

0

主题

0

好友

9

积分

新手上路

Rank: 1

5#
发表于 2014-1-29 14:05:36 |只看该作者

回帖奖励 +5

感谢,解决了一个大疑问
回复

使用道具 举报

2

主题

0

好友

51

积分

注册会员

Rank: 2

6#
发表于 2014-2-22 21:39:40 |只看该作者

回帖奖励 +5

还有从Python 3.0 开始 urllib2 就改到 urllib 里了。
所以查天气程序import urllib2会出错。。
要import urllib才可以。。。。。
话说2~3的改变真的好大。。可是网上的教程又一大堆都是python2的,随时准备掉坑里。。。
回复

使用道具 举报

1

主题

1

好友

52

积分

注册会员

Rank: 2

7#
发表于 2015-1-4 17:28:25 |只看该作者
我就是看着2的教程学的3,被坑无数
回复

使用道具 举报

0

主题

1

好友

132

积分

注册会员

Rank: 2

8#
发表于 2015-12-14 17:26:29 |只看该作者
get
回复

使用道具 举报

0

主题

0

好友

98

积分

注册会员

Rank: 2

9#
发表于 2016-1-17 20:23:49 |只看该作者
在第6节课是被坑了…………
回复

使用道具 举报

1

主题

0

好友

145

积分

注册会员

Rank: 2

10#
发表于 2017-3-2 18:11:07 |只看该作者
“如果你输了 abc,程序会认为这是一个叫做 abc 的变量,而假如你没有定义过这个变量,就会报错”。。。
我觉得3将两者合并是个不错的选择。。因为2中的input()如上所述,给外部提供了一个可以操作程序内部变量的机会,这是非常危险的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-12-4 01:40 , Processed in 0.030058 second(s), 36 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部