print,中文意思是打印,在python里它不是往纸上打印,而是打印在命令行,或者叫终端、控制台里面。print是python里很基本很常见的一个操作,它的操作对象是一个字符串(什么是字符串,此处按住不表,且待日后慢慢道来)。基本格式是:

print 你要打印的东西

或者

print(你要打印的东西)

这里一定要英文字符的括号,所有程序中出现的符号都必须是英文字符,注意别被你的输入法坑了。

注意:如果你是python3及以后的版本,一定得用print(),不然会出错。

各位同学可以在自己的python环境中试着输出以下内容:

>>> print "hello"

hello

>>> print('world')

world

>>> print 1

1

>>> print(3.14)

3.14

>>> print 3e30

3e+30

>>> print 1 + 2 * 3

7

>>> print(2 > 5)

False

python3记得在后面必须加上()

直接在print后面加一段文字来输出的话,需要给文字加上双引号或者单引号。大家发现,print除了打印文字之外,还能输出各种数字、运算结果、比较结果等。你们试着自己print一些别的东西,看看哪些能成功,哪些会失败,有兴趣的话再猜一猜失败的原因。

其实在python命令行下,print是可以省略的,默认就会输出每一次命令的结果。就像这样:

>>> 'Your YiDa!'

'Your YiDa!'

>>> 2+13+250

265

>>> 5<50

True

python有一个接收命令行下输入的方法:

input()

注意,和print不同的是,这次我们必须得加上()了,而且得是英文字符的括号。

好了,终于可以搬出那个弱智小游戏了,耶!游戏里我们需要跟程序一问一答,所以我们先把话给说上。

打开我们的python编辑器,不管是IDLE,在线编辑器,还是其他的IDE。在代码编辑器中输入下面几句代码:

print "Who do you think I am?"

input()

print "Oh, yes!"

然后,Run!(Forrest Run!)你会在命令行中看到,程序输出了第一句之后就停住了,这是input在等待你的输入。

输入你的回答,回车。你会看到程序的回答。注意!引号!!又是引号!!!和print一样,如果你输的是一串文字,要用引号''或者""引起来,如果是数字则不用。

(插一句,python还有一个输入的方法:raw_input(),它把所有的输入都直接当作一串字符,于是就可以不用加引号,)

先从简单的开始,如果你想把两段字符连起来输出

str1 = 'good'

str2 = 'bye'

你可以

print str1 + str2

或者还可以把字符变量一个字符串相加

print 'very' + str1

print str1 + ' and ' + str2

但如果你想要把一个数字加到文字后面输出,比如这样

num = 18

print 'My age is' + num

程序就会报错。因为字符和数字不能直接用+相加。

一种解决方法是,用str()把数字转换成字符串

print 'My age is' + str(18)

num = 18

print 'My age is' + str(num)

还有一种方法,就是用%对字符串进行格式化

num = 18

print 'My age is %d' % num

输出的时候,%d会被%后面的值替换。输出

My age is 18

这里,%d只能用来替换整数。如果你想格式化的数值是小数,要用%f

print ‘Price is %f’ % 4.99

输出

Price is 4.990000

如果你想保留两位小数,需要在f前面加上条件:%.2f

print ‘Price is %.2f’ % 4.99

输出

Price is 4.99

另外,可以用%s来替换一段字符串

name = 'Crossin'

print '%s is a good teacher.' % name 变量

输出

Crossin is a good teacher.

或者

print 'Today is %s.' %'Friday' 一段字符

输出

Today is Friday.

注意区分:有引号的表示一段字符,没有引号的就是一个变量,这个变量可能是字符,也可能是数字,但一定要和%所表示的格式相一致。

之前我们说到,可以用%来构造一个字符串,比如

print '%s is easy to learn' % 'Python'

有时候,仅仅代入一个值不能满足我们构造字符串的需要。假设你现在有一组学生成绩的数据,你要输出这些数据。在一行中,既要输出学生的姓名,又要输出他的成绩。例如

Mike‘s score is 87.

Lily‘s score is 95.

在python中,你可以这样实现:

print "%s's score is %d" % ('Mike', 87)

或者

name = ‘Lily’

score = 95

print "%s's score is %d" % (name, score)

无论你有多少个值需要代入字符串中进行格式化,只需要在字符串中的合适位置用对应格式的%表示,然后在后面的括号中按顺序提供代入的值就可以了。占位的%和括号中的值在数量上必须相等,类型也要匹配。

('Mike', 87)这种用()表示的一组数据在python中被称为元组(tuple)

print ‘Hello’+1

print ‘hello%d’ % '123'

程序运行时会报错。因为第一句里,字符串和整数不能相加;第二句里,%d需要的是一个整数,而'123'是字符串。

这种情况下,python提供了一些方法对数值进行类型转换:

int(x) #把x转换成整数

float(x) #把x转换成浮点数

str(x) #把x转换成字符串

bool(x) #把x转换成bool值

上述两个例子就可以写成:

print ‘Hello’+str(1)

print ‘hello%d’ % int('123')

以下等式的结果均为真:

int('123') == 123

float('3.3') == 3.3

str(111) == '111'

bool(0) == False

并不是所有的值都能做类型转换,比如int('abc')同样会报错,python没办法把它转成一个整数。

另外关于bool类型的转换,我们会专门再详细说明。大家可以先试试以下结果的值,自己摸索一下转换成bool类型的规律:

bool(-123)

bool(0)

bool('abc')

bool('False')

bool('')

bool('False')

print一下结果,会发现是True。这是什么原因?

因为在python中,以下数值会被认为是False:

为0的数字,包括0,0.0

空字符串,包括'',""

表示空值的None

空集合,包括(),[],{}

其他的值都认为是True。

None是python中的一个特殊值,表示什么都没有,它和0、空字符、False、空集合都不一样

所以,‘False’是一个不为空的字符串,当被转换成bool类型之后,就得到True。

同样bool(' ')的结果是True,一个空格也不能算作空字符串。

bool('')才是False。

在if、while等条件判断语句里,判断条件会自动进行一次bool的转换。比如

a = '123'

if a:

print 'this is not a blank string'

这在编程中是很常见的一种写法。效果等同于

if bool(a)

或者

if a != ''

除了指定位置进行索引外,list还可以处理负数的索引。继续用昨天的例子:

l = [365, 'everyday', 0.618, True]

l[-1]表示l中的最后一个元素。

l[-3]表示倒数第3个元素。

切片操作符是在[]内提供一对可选数字,用:分割。冒号前的数表示切片的开始位置,冒号后的数字表示切片到哪里结束。同样,计数从0开始。

注意,开始位置包含在切片中,而结束位置不包括。

l[1:3]

得到的结果是['everyday', 0.618]。

如果不指定第一个数,切片就从列表第一个元素开始。

如果不指定第二个数,就一直到最后一个元素结束。

都不指定,则返回整个列表的一个拷贝。

l[:3]

l[1:]

l[:]

同索引一样,切片中的数字也可以使用负数。比如:

l[1:-1]

得到['everyday', 0.618]

sentence = 'I am an Englist sentence'

这时就需要对字符串进行分割。

sentence.split()

split()会把字符串按照其中的空格进行分割,分割后的每一段都是一个新的字符串,最终返回这些字符串组成一个list。于是得到

['I', 'am', 'an', 'Englist', 'sentence']

原来字符串中的空格不再存在。

除了空格外,split()同时也会按照换行符\n,制表符\t进行分割。所以应该说,

split默认是按照空白字符进行分割。

之所以说默认,是因为split还可以指定分割的符号。比如你有一个很长的字符串

section = 'Hi. I am the one. Bye.'

通过指定分割符号为'.',可以把每句话分开

section.split('.')

得到

['Hi', ' I am the one', ' Bye', '']

这时候,'.'作为分割符被去掉了,而空格仍然保留在它的位置上。

注意最后那个空字符串。每个'.'都会被作为分割符,即使它的后面没有其他字符,也会有一个空串被分割出来。例如

'aaa'.split('a')

将会得到['', '', '', ''],由四个空串组成的list。

split是把一个字符串分割成很多字符串组成的list,而join则是把一个list中的所有字符串连接成一个字符串。

join的格式有些奇怪,它不是list的方法,而是字符串的方法。首先你需要有一个字符串作为list中所有元素的连接符,然后再调用这个连接符的join方法,join的参数是被连接的list:

s = ';'

li = ['apple', 'pear', 'orange']

fruit = s.join(li)

print fruit

得到结果'apple;pear;orange'。

从结果可以看到,分号把list中的几个字符串都连接了起来。

你也可以直接在shell中输入:

';'.join(['apple', 'pear', 'orange'])

得到同样的结果。

用来连接的字符串可以是多个字符,也可以是一个空串:

''.join(['hello', 'world'])

得到'helloworld',字符串被无缝连接在一起。

1. 遍历

通过for...in可以遍历字符串中的每一个字符。

word = 'helloworld'

for c in word:

print c

2. 索引访问

通过[]加索引的方式,访问字符串中的某个字符。

print word[0]

print word[-2]

与list不同的是,字符串能不通过索引访问去更改其中的字符。

word[1] = 'a'

这样的赋值是错误的。

3. 切片

通过两个参数,截取一段子串,具体规则和list相同。

print word[5:7]

print word[:-5]

print word[:]

4. 连接字符

join方法也可以对字符串使用,作用就是用连接符把字符串中的每个字符重新连接成一个新字符串。

newword = ','.join(word)

打开一个文件的命令很简单:

file('文件名')

这里的文件名可以用文件的完整路径,也可以是相对路径。因为我们把要读取的文件和代码放在了同一个文件夹下,所以只需要写它的文件名就够了。

f = file('data.txt')

但这一步只是打开了一个文件,并没有得到其中的内容。变量f保存了这个文件,还需要去读取它的内容。你可以通过read()函数把文件内所有内容读进一个字符串中。

data = f.read()

做完对文件的操作之后,记得用close()关闭文件,释放资源

f = file('data.txt') 打开

data = f.read() 读取

print data 输出

f.close()

读取文件内容的方法还有

readline() #读取一行内容

readlines() #把内容按行读取至一个list中

但python默认是以只读模式打开文件。如果想要写入内容,在打开文件的时候需要指定打开模式为写入:

f = file('output.txt', 'w')

'w'就是writing,以这种模式打开文件,原来文件中的内容会被你新写入的内容覆盖掉,如果文件不存在,会自动创建文件。

不加参数时,file为你默认为'r',reading,只读模式,文件必须存在,否则引发异常。

另外还有一种模式是'a',appending。它也是一种写入模式,但你写入的内容不会覆盖之前的内容,而是添加到文件中。

打开文件还有一种方法,就是open(),用法和file()是一致的。

写入内容的方法同样简单:

f.write('a string you want to write')

write的参数可以是一个字符串,或者一个字符串变量。

示例程序:

data = 'I will be in a file.\nSo cool!'

out = open('output.txt', 'w')

out.write(data)

out.close()