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()