## raw_input和print
自从本课程开始以来,我们还没有感受到computer姑娘的智能。最简单的智能应该体现在哪里呢?想想小孩子刚刚回说话的时候情景吧。
> 小孩学说话,是一个模仿的过程,孩子周围的人怎么说,她(他)往往就是重复。看官可以忘记自己当初是怎么学说话了吧?就找个小孩子观察一下吧。最好是自己的孩子。如果没有,就要抓紧了。
通过python能不能实现这个简单的功能呢?当然能,要不然python如何横行天下呀。
不过在写这个功能前,要了解两个函数:raw_input和print
> 这两个都是python的内建函数(built-in function)。关于python的内建函数,下面这个表格都列出来了。所谓内建函数,就是能够在python中直接调用,不需要做其它的操作。
Built-in Functions
* * *
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#abs-----divmod---input----open-----staticmethod)|abs() | divmod() | input()| open()| staticmethod()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#all-----enumerate----int--ord--str)|all() | enumerate() | int() | ord() | str()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#any-----eval-----isinstance---pow--sum)|any() | eval() | isinstance()| pow()| sum()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#basestring--execfile-----issubclass---print----super)|basestring() | execfile() | issubclass() | print() | super()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#bin-----file-----iter-----property-----tuple)|bin() | file() | iter()| property()| tuple()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#bool----filter---len--range----type)|bool() | filter() | len() | range() | type()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#bytearray---float----list-----raw_input----unichr)|bytearray() | float()| list() | raw_input()| unichr()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#callable----format---locals---reduce---unicode)|callable() | format() | locals() | reduce() | unicode()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#chr-----frozenset----long-----reload---vars)|chr() | frozenset() | long() | reload() | vars()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#classmethod-----getattr--map--repr-----xrange)|classmethod()| getattr()| map() | repr() | xrange()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#cmp-----globals--max--reversed-----zip)|cmp() | globals()| max()| reversed()| zip()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#compile--hasattr-----memoryview---round----import)|compile() |hasattr() | memoryview()| round() | **import**()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#complex--hash----min--set--apply)|complex() |hash() | min()| set() | apply()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#delattr--help----next-----setattr--buffer)|delattr() |help()| next()| setattr()| buffer()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#dict----hex---object---slice---coerce)|dict() | hex() |object() |slice() | coerce()|
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#dir-----id----oct--sorted---intern)|dir() | id() |oct() |sorted() |intern()|
这些内建函数,怎么才能知道哪个函数怎么用,是干什么用的呢?
不知道你是否还记得我在前面使用过的方法,这里再进行演示,这种方法是学习python的法宝。
~~~
>>> help(raw_input)
~~~
然后就出现:
~~~
Help on built-in function raw_input in module __builtin__:
raw_input(...)
raw_input([prompt]) -> string
Read a string from standard input. The trailing newline is stripped.
If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
On Unix, GNU readline is used if enabled. The prompt string, if given,
is printed without a trailing newline before reading.
~~~
从中是不是已经清晰地看到了`raw_input()`的使用方法了。
还有第二种方法,那就是到python的官方网站,查看内建函数的说明。[https://docs.python.org/2/library/functions.html](https://docs.python.org/2/library/functions.html)
其实,我上面那个表格,就是在这个网页中抄过来的。
例如,对`print()`说明如下:
~~~
print(*objects, sep=' ', end='\n', file=sys.stdout)
Print objects to the stream file, separated by sep and followed by end. sep, end and file, if present, must be given as keyword arguments.
All non-keyword arguments are converted to strings like str() does and written to the stream, separated by sep and followed by end. Both sep and end must be strings; they can also be None, which means to use the default values. If no objects are given, print() will just write end.
The file argument must be an object with a write(string) method; if it is not present or None, sys.stdout will be used. Output buffering is determined by file. Use file.flush() to ensure, for instance, immediate appearance on a screen.
~~~
分别在交互模式下,将这个两个函数操练一下。
~~~
>>> raw_input("input your name:")
input your name:python
'python'
~~~
输入名字之后,就返回了输入的内容。用一个变量可以获得这个返回值。
~~~
>>> name = raw_input("input your name:")
input your name:python
>>> name
'python'
>>> type(name)
<type 'str'>
~~~
而且,返回的结果是str类型。如果输入的是数字呢?
~~~
>>> age = raw_input("How old are you?")
How old are you?10
>>> age
'10'
>>> type(age)
<type 'str'>
~~~
返回的结果,仍然是str类型。
再试试`print()`,看前面对它的说明,是比较复杂的。没关系,我们从简单的开始。在交互模式下操作:
~~~
>>> print("hello, world")
hello, world
>>> a = "python"
>>> b = "good"
>>> print a
python
>>> print a,b
python good
~~~
比较简单吧。当然,这是没有搞太复杂了。
特别要提醒的是,`print()`默认是以`\n`结尾的,所以,会看到每个输出语句之后,输出内容后面自动带上了`\n`,于是就换行了。
有了以上两个准备,接下来就可以写一个能够“对话”的小程序了。
~~~
#!/usr/bin/env python
# coding=utf-8
name = raw_input("What is your name?")
age = raw_input("How old are you?")
print "Your name is:", name
print "You are " + age + " years old."
after_ten = int(age) + 10
print "You will be " + str(after_ten) + " years old after ten years."
~~~
对这段小程序中,有几点说明
前面演示了`print()`的使用,除了打印一个字符串之外,还可以打印字符串拼接结果。
~~~
print "You are " + age + " years old."
~~~
注意,那个变量`age`必须是字符串,如最后的那个语句中:
~~~
print "You will be " + str(after_ten) + " years old after ten years."
~~~
这句话里面,有一个类型转化,将原本是整数型`after_ten`转化为了str类型。否则,就包括,不信,你可以试试。
同样注意,在`after_ten = int(age) + 10`中,因为通过`raw_input`得到的是str类型,当age和10求和的时候,需要先用`int()`函数进行类型转化,才能和后面的整数10相加。
这个小程序,是有点综合的,基本上把已经学到的东西综合运用了一次。请看官调试一下,如果没有通过,仔细看报错信息,你能够从中获得修改方向的信息。
## [](https://github.com/qiwsir/StarterLearningPython/blob/master/107.md#原始字符串)原始字符串
所谓原始字符串,就是指字符串里面的每个字符都是原始含义,比如反斜杠,不会被看做转义符。如果在一般字符串中,比如
~~~
>>> print "I like \npython"
I like
python
~~~
这里的反斜杠就不是“反斜杠”的原始符号含义,而是和后面的n一起表示换行(转义了)。当然,这似乎没有什么太大影响,但有的时候,可能会出现问题,比如打印DOS路径(DOS,有没有搞错,现在还有人用吗?)
~~~
>>> dos = "c:\news"
>>> dos
'c:\news' #这里貌似没有什么问题
>>> print dos #当用print来打印这个字符串的时候,就出问题了。
c:
ews
~~~
如何避免?用前面讲过的转义符可以解决:
~~~
>>> dos = "c:\\news"
>>> print dos
c:\news
~~~
此外,还有一种方法,如:
~~~
>>> dos = r"c:\news"
>>> print dos
c:\news
>>> print r"c:\news\python"
c:\news\python
~~~
状如`r"c:\news"`,由r开头引起的字符串,就是原始字符串,在里面放任何字符都表示该字符的原始含义。
这种方法在做网站设置网站目录结构的时候非常有用。使用了原始字符串,就不需要转义了。
- 第零章 预备
- 关于Python的故事
- 从小工到专家
- Python安装
- 集成开发环境
- 第壹章 基本数据类型
- 数和四则运算
- 除法
- 常用数学函数和运算优先级
- 写一个简单的程序
- 字符串(1)
- 字符串(2)
- 字符串(3)
- 字符串(4)
- 字符编码
- 列表(1)
- 列表(2)
- 列表(3)
- 回顾list和str
- 元组
- 字典(1)
- 字典(2)
- 集合(1)
- 集合(2)
- 第贰章 语句和文件
- 运算符
- 语句(1)
- 语句(2)
- 语句(3)
- 语句(4)
- 语句(5)
- 文件(1)
- 文件(2)
- 迭代
- 练习
- 自省
- 第叁章 函数
- 函数(1)
- 函数(2)
- 函数(3)
- 函数(4)
- 函数练习
- 第肆章 类
- 类(1)
- 类(2)
- 类(3)
- 类(4)
- 类(5)
- 多态和封装
- 特殊方法(1)
- 特殊方法(2)
- 迭代器
- 生成器
- 上下文管理器
- 第伍章 错误和异常
- 错误和异常(1)
- 错误和异常(2)
- 错误和异常(3)
- 第陆章 模块
- 编写模块
- 标准库(1)
- 标准库(2)
- 标准库(3)
- 标准库(4)
- 标准库(5)
- 标准库(6)
- 标准库(7)
- 标准库(8)
- 第三方库
- 第柒章 保存数据
- 将数据存入文件
- mysql数据库(1)
- MySQL数据库(2)
- mongodb数据库(1)
- SQLite数据库
- 电子表格
- 第捌章 用Tornado做网站
- 为做网站而准备
- 分析Hello
- 用tornado做网站(1)
- 用tornado做网站(2)
- 用tornado做网站(3)
- 用tornado做网站(4)
- 用tornado做网站(5)
- 用tornado做网站(6)
- 用tornado做网站(7)
- 第玖章 科学计算
- 为计算做准备
- Pandas使用(1)
- Pandas使用(2)
- 处理股票数据
- 附:网络文摘
- 如何成为Python高手
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系