python的raw_ input是什么意思-python中的input()和raw_input()

首先,raw的意思就是「未经加工的,生的」。

python 2.x 中:

raw_input() 和 input() 这两个内建函数都可以读取用户的输入来实现交互的目的,但二者存在差别。

raw_input():

顾名思义,不管用户输入的是字符还是数字,它都力求 "原样" 输出,因此对于用户输入的对象,该函数以字符串的形式保存下来。

何谓 "原样" 输出,想一下print语句的使用。对于我们想要原样打印出来的语句,我们都是放在" "中以字符串的形式来实现。

这里的raw_input()我们可以做类似print的理解(用户输入的就像是引号中的内容), raw_input()将接受对象以字符串的形式保存下来来实现所谓的『raw』。

1 >>> s =raw_input()2 string3 >>>s4 "string"

5 >>>type(s)6

7 >>> n =raw_input()8 123

9 >>>n10 "123"

11 >>>type(n)12

13 >>> ss =raw_input()14 st +ring15 >>>ss16 "st + ring"

17 >>> nn =raw_input()18 123 + 123

19 >>>nn20 "123 + 123"

input():

Help on built-in function input in module __builtin__:

input(...)

input([prompt])->value

Equivalent to eval(raw_input(prompt)).

如上,通过help(input)不难发现input()本身是由 raw_input()来实现的,input()会对用户输入的内容 "自作聪明" 地去eval()一下。

因此只要搞清eval()这个函数就可以玩透input(), eval()就是要拿出字符串中的表达式的value, 而input ()相当于 eval(raw_input()),

因此 input() 就是在对用户输入的对象『raw』一下得到了一个字符串的基础上,再拿出得到的字符串中的表达式的value。

Talk is cheap, show the code!

1 #看一下字符串中表达式是数值型的eval()

2 >>> n = "123"

3 >>>eval(n)4 123

5 >>>type(n)6

7 >>> n_eval =eval(n)8 >>>n_eval9 123

10 >>>type(n_eval)11

12

13 >>> nn = "123" + "456"

14 >>>eval(nn)15 123456

16 >>> nn_eval =eval(nn)17 >>>nn_eval18 123456

19 >>>type(nn)20

21 >>>type(nn_eval)22

23 >>> nn_another_mode = "123 + 456"

24 >>>eval(nn_another_mode)25 579

26

27 #注意下面这个错误,这个错误说明string(类型不知)是无法value出来的

28 >>> s = "string"

29 >>>eval(s)30 Traceback (most recent call last):31 File "", line 1, in

32 File "", line 1, in

33 NameError: name "string" is notdefined34

35 #但是"string"(字符串类型)是可以value的

36 #看一下字符串中的表达式是字符串型的eval()

37

38 >>> s = "string"

39 >>> s_str =s40 >>> s = "string"

41 >>> s_str = "s"

42 >>>eval(s_str)43 "string"

44 >>>type(s_str)45

46 >>>type(eval(s_str))47

48

49 >>> ss = "st + ring"

50 >>> ss_str = "ss"

51 >>>eval(ss_str)52 "st + ring"

53 >>>

54 >>> ss = "st" + "ring"

55 >>> ss_str = "ss"

56 >>>ss_str57 "ss"

58 >>>eval(ss_str)59 "string"

有了上面的raw_input()和eval()的理解,再来玩input()就是分分钟的事,完全无压力

1 >>> s =input()2 string3 Traceback (most recent call last):4 File "", line 1, in

5 File "", line 1, in

6 NameError: name "string" is notdefined7

8 >>> s =input()9 "string"

10 >>>s11 "string"

12 >>> ss =input()13 "st" + "ring"

14 >>>ss15 "string"

16 >>> ss =input()17 "st + ring"

18 >>>ss19 "st + ring"

小结:

在 Python2.x 中 关于这两个输入函数 常见的错误无非两种:

1 number = raw_input("enter a number please: ") 这里再please也没用, 正确做法:

number = int(raw_input("enter a number please: ")) 该 float 就换成float()

2 用过Python3.x 转到Python2.x 的时候,一不小心 name = input("enter a name for the file, please: ")

Traceback (most recent call last):

File "", line 1, in

File "", line 1, in

NameError: name "whatever you input" is not defined

这个时候把输入的内容加上引号就可以了,或许你可以使用raw_input()

那是因为

Python 3.x

没有raw_input() 了,只有input(), 但是用法功能却跟Python2.x中的raw_input() 一样。

--------------------------------------------------------------------------------------------------2016-01-07 补充:

1 >>>

2 >>> deftest():3 ... print "this is a tset"

4 ... i = raw_input(">>")5 ... while i < 0 or i > 100:6 ... print "wrong number!"

7 ... i = raw_input(">>")8 ... print"done!"

9 ...10 >>>test()11 this isa tset12 >>100

13 wrong number!14 >>33

15 wrong number!16 >>2

17 wrong number!18 >>

19 wrong number!20 >>Traceback (most recent call last):21 File "", line 1, in

22 File "", line 6, intest23 KeyboardInterrupt

上述例子运行后While 进入死循环一直无法跳出,虽然知道是raw_input()的使用有问题,但是仍有两个问题值得探讨:

1 为什么把一个字符串去做与数字的大小比较,程序没有报错?

2 为什么进入了死循环?

因为python对字符串和int定义了比较运算的method

1 >>> "0" ==02 False3 >>> "0" <04 False5 >>> "0" >06 True7

8 >>> "a" <09 False10 >>> "a" >011 True12 >>> "a" ==013 False

当比较字符串和数字的时候,数字永远小于字符串。所以程序没有报错,而是条件i > 100永远为真,进入了死循环。

---------------------------------------------------------------------------------------------------------------------------

进一步探讨:

上面例子只是Python2.7 版本在官方解释器CPython下 泛型问题 "object comparison" 的一个子集:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值