破解密码那些事儿(chapter 4,字符串的故事,上)

本章节的内容涵盖
字符串
字符串的拼接和复制
使用IDLE来写程序
保存并通过IDLE运行程序
print()函数
input()函数
注释

对于整形数和数学操作的介绍,前面两个章节已经够多了.毕竟Python又不是个计算器是吧.在这个章节里头,我们会学习如何存储文本到变量里,学习如何将不同的文本拼接起来,并且如何把他们显示到屏幕上.我们将要完成我们的第一个程序,通过程序向我们自己打招呼,这是个激动人心的时刻!

字符串

在Python中,对文本的操作我们称为字符串操作,简称字符串.从这以后的章节,我们需要处理的都是文本的内容,比如将明文'One if by land,two if by space.'转变成密文'Tqe kg im npqv, jst kg im oapxe.'明文和密文,在计算机里头,其实就是个字符串,然而Python提供了很多字符串的操作方法.
对我们而言,存储字符串类型的值和存储整形数与浮点数的操作并没有什么不同.当我们敲入字符串的时候,我们把值放在两个单引号(')中间,表面他们是字符串.下面是例子

Paste_Image.png

单引号并不是字符串的一部分.Python是个聪明的家伙,能够知道'hello'是个字符串,而且明白变量spam存储的是单引号里头的内容hello.
如果你在命令行里头敲入spam的话,你会看到spam存储的值会被打印出来.因为Python会去推演存在变量里头的值,在这里例子里,就是字符串'hello'.

字符串的值几乎涵盖了键盘的所有字符,请注意,我说的是几乎,那些剩余的字符我会在后面的章节讲解。
字符串例子

不知道你们注意到了没有,''这个字符串没有包含任何的字符,所以我们称之为空字符串

字符串拼接

用“+”可以实现将两个字符串拼接起来,专业名词字符串拼接就是这个意思。尝试一下在命令行敲入“Hello”+“World!”(这是一个伟大的程序员打招呼的方式,每个程序员接触一个新的语言做的第一个程序通常都是这个,意味着编码的环境搭建好了,最简单的程序范型已经实现,可以驾驭计算机改变世界了!WOW!):

HelloWord

如果在‘Hello’和‘World!’的中间加一个空格该如何操作呢?很简单,只需要在‘Hello’的末端加一个空格:
Hello world

请记住,Python只会在你让他连接字符串的时候才会执行这个操作。如果你想在字符串的中间加上空格,必须自己手动加上一个空格。
有没有发现“+”操作符不是普通的加法运算这么简单,还可以连接两个不同的字符串然后获得一个新的字符串(‘Hello ’+‘World!’等于‘Hello World!’),但是操作起来和算数加法并没有两样。这是为什么呢?因为Python知道同一种数据类型通过“+”操作符能完成什么操作,而每一个数据都有他们自己的数据类型。‘Hello’的数据类型是字符串,而5的数据类型是整形数。数据类型会告诉我们(或计算机)这是一个什么数据,有什么操作方法。(聪明的你可能会发现我自己定义一个类型的话,‘+’操作符怎么操作,那就要自己定义了,这是高级属性!)
有的朋友看到“+”可以连接两个值,比如两个字符串或者两个整形数,可能就会想如果一边是字符串一边是整形数,那会有什么样的结果呢?这位同学的问题很棒,但是你如果在命令行敲入下面的语句的话,你看到的将会是错误,因为这样的操作并未被定义过:
‘Hello’+42的错误

“字符串的乘法”

如果说在字符串操作里头‘+’操作符可以看做是加法的话,那么同样的‘’操作符可以看成是乘法。字符串的‘’操作是连接字符串和数字完成字符串复制,最后会返回多个和自己一样的字符串的拼接。请看下面的例子:

字符串乘法

和'+'操作符不一样的是,两个整形数可以返回他们的和;两个整形数通过‘’也可以获得他们的积,但是两个字符串用‘’连接,是会出错的:

以上的两个操作,可以看出了字符串操作和整形数操作的异同。

通过print()函数输出值

在python中有一种特殊的指令叫做函数,print()函数是最常用的函数。请看例子:

print()函数

函数通常是一堆打包好的代码,他们可以完成一项或几项操作的指令,比如print()可以把变量的值输出到屏幕。Python自己也有很多这样不同功能的函数。调用函数意味着执行这些打包好的操作。
上面的例子中print()函数把放在它括号里头的变量的值输出到屏幕。这种把数值传递到函数中处理的方式,叫做参数传递,而变量或者值自身就是参数。当我们开始写程序的时候,我们经常都会用到print()这个函数把文本输出到屏幕中去。
print()可以接受一个表达式作为参数,而并非只能接受一个变量或者一个值。因为表达式最后可以推导出一个值来替换掉这个表达式,如果一个表达式无法推导出一个值的话,这个操作是会出错的。
字符串拼接表达式作为参数

‘Hello, ’+spam这个表达式,可以推导出‘Hello, ’+‘Al’,最后变成‘Hello, Al’然后输出到屏幕中去。

转义字符

有时候,我们会想用到一些不容易敲入到电脑的字符。比如想敲入一个单引号到程序里头,但是通常程序会以为这是字符串开始的标记,然后程序就返回一堆错误,因为Python期望还有另外一个单引号来终结这个字符串。请看例子:


单引号引入的错误

如果想解决上面的例子中的问题,我们就要使用转义字符。用\开始的字符,Python就会认为这是个转义字符,不会看成是程序约定语法的一部分。比如\t,\n,和'就是三个转义字符。Python遇到转义字符就会把这些看做是一个字符而不是具有语法意义的标志:


转义字符

常用的转义的字符如下图所示,都是一些我们在源代码里头难以打出来的字符:
转义字符列表

因为斜杠已经作为了转义字符的标志,所以如果要打入斜杠的时候也必须加上加上转义用的斜杠,不然的话:


斜杠的转义

因为tea的t和前面的斜杠让Python误认为,你要是输入一个Tab键的值,所以必须加上转义才能打出斜杠:
斜杠的转义2

单引号和双引号

对于字符串而言,除了可以用单引号来标示,也可以换成双引号。下面两个语句表示的其实是同一个意思:



Paste_Image.png

但是不要以为用单引号与双引号的组合也可以标示一个字符串,这是会报错的!


不要这么淘气

对计算机而言无论是单引号还是双引号,都能很好的识别出那是字符串。但是对于我来说我更倾向单引号,因为双引号必须按住shift键。请注意的是,无论是单引号还是双引号,如果你需要它变成你字符串内容的一部分,还是需要加上斜杠来做转义。请看如下例子:
单引号和双引号转义的例子

从上面的例子也可以看出,在双引号里头出现的单引号和在单引号里头出现的双引号是不需要转义的,你看Python还是很聪明的!

又到做练习的时候了!

1.请问,在命令行输入下面的语句,输出的会是什么?
>>> spam = 'Cats'
>>> spam

2.请问,在命令行输入下面的语句,输出的会是什么?
>>> spam = 'Cats'
>>> spam + spam + spam

3.请问,在命令行输入下面的语句,输出的会是什么?
>>> spam = 'Cats'
>>> spam * 3

4.请问,在命令行输入下面的语句,输出的会是什么?
>>> print("Dear Alice,\nHow are you?\nSincerely,\nBob")

5.请问,在命令行输入下面的语句,输出的会是什么?
>>> print("Hello" + 'Hello')

答案
1.Cats
2.CatsCatsCats
3.CatsCatsCats
4.Dear Alice,
How are you?
Sincerely,
Bob
5.HelloHello

推荐阅读更多精彩内容