Crossin的编程教室
标题:
【Python 第63课】python 2到3的新手坑
[打印本页]
作者:
crossin先生
时间:
2013-12-14 17:31
标题:
【Python 第63课】python 2到3的新手坑
2013-12-14 17:30 上传
下载附件
(18.71 KB)
昨天挖了个坑,论坛上已经有不少解答了,还有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())
作者:
a564605922
时间:
2013-12-14 20:16
果然是和坑
作者:
近猪者痴
时间:
2013-12-17 20:49
好久没用python了,今天重新下了个3.3.3,实在是个大坑
作者:
kernel1983
时间:
2013-12-19 16:20
python 2.x系列也是到了2.4 2.5才进入稳定期的
软件无需太新, 一直坚持2.x用用也不差
作者:
wikings
时间:
2014-1-29 14:05
感谢,解决了一个大疑问
作者:
shengyang998
时间:
2014-2-22 21:39
还有从Python 3.0 开始 urllib2 就改到 urllib 里了。
所以查天气程序import urllib2会出错。。
要import urllib才可以。。。。。
话说2~3的改变真的好大。。可是网上的教程又一大堆都是python2的,随时准备掉坑里。。。
作者:
Flughafencon
时间:
2015-1-4 17:28
我就是看着2的教程学的3,被坑无数
作者:
草办
时间:
2015-12-14 17:26
get
作者:
谢冰
时间:
2016-1-17 20:23
在第6节课是被坑了
…………
作者:
brahmagupta
时间:
2017-3-2 18:11
“如果你输了 abc,程序会认为这是一个叫做 abc 的变量,而假如你没有定义过这个变量,就会报错”。。。
我觉得3将两者合并是个不错的选择。。因为2中的input()如上所述,给外部提供了一个可以操作程序内部变量的机会,这是非常危险的。
作者:
crossin先生
时间:
2017-3-3 16:26
brahmagupta 发表于 2017-3-2 18:11
“如果你输了 abc,程序会认为这是一个叫做 abc 的变量,而假如你没有定义过这个变量,就会报错”。。。
我 ...
确实如此
欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/)
Powered by Discuz! X2.5