破解密码那些事儿(chapter 3,初识Python,下)

值必有类型

之前我们说的整形数浮点数其实是一种数据类型。每一个程序能认识的值都有类型。比如42就是一个整形数,具体而言整形类型可以用int来表示;7.5是一个浮点数,浮点数类型可以用float来表示。

在本书,我们学的数据类型并不多,包括下一章会学习到的string类型。到现在为止,为什么学习的都是值类型,值类型只是数据类型的一种,要识别一个数据的数据类型很简单,只需要看你打出的值就是了。比如整形数木有小数点,而浮点数是一定有小数点,你就很容易理解42是整形数,而42.0是浮点数了。

赋值语句与数据存储方式

我知道你们一直很明白我说的东西,直到上一节,关于值,值类型与数据类型的东西,这些基本的概念一定得明白,这一节希望能从计算机工作原理来和大家讲述。

当我们使用了估值表达式之后,程序会把他们推演到一个值,但是如何把他们存储下来呢?通常计算机把这些东西存储到变量里头。

为了更好的理解变量这个东西,我们假象一个盒子出来,这个盒子放着要存储的值。通常一个变量需要通过用=号连接的表达式来传递这个值,称为赋值。比如我要把15这个值存到名叫“spam”的变量里头去,我们只需要写spam=15:

你可以假想变量就是那个盒子,命名为spam(贴在盒子上,你可以写别的名字贴上去),里面装着一个15的值,就好像一张写着15的小纸片一样。

在命令行上敲入这句代码回车后,你看不到任何的响应,只有一个空行。除非出现了错误,显示的是错误语句,你可以认为这些指令已经成功执行。出现了>>>后你可以敲下一个指令了。

一个带有=的赋值语句做了什么事情呢?首先,创建了一个名叫spam的变量,然后存储了值为15的数据。和估值表达式不同,语句是一种指令性的操作,不会去做估值计算的事情,仅仅是完成某项操作,所以这就是为什么命令行执行完命令后没有回应的原因了。

看到这里,各位看官可能会迷惑,啥是表达式,啥是语句呢?请记住,如果Python的程序能推到出一个值的时候那就是表达式,如果不是,就是语句。(老外还是迷糊,不过有些东西一句话未必能讲清楚,慢慢看)

一个赋值语句的格式是这样的,一个变量名,后面跟着=,然后是一个表达式。这个表达式计算出来的值就会存到这个变量里头。

要记住,变量存储的永远只是一个值,而不是表达式,再复杂的表达式最终都会推演出一个值,不然程序就挂了。比如,我们有这样一个语句spam=10+5,表达式10+5会被计算为15,然后15就会被存储到spam里头。赋值语句中的变量如果是第一次出现,那么程序会先创建这个变量,然后把值存进去。

这里有个有意思的东西,如果我们输入spam+5的时候,命令行会返回20

看起来有点奇怪,不过你还记得我们之前已经给spam这个变量赋值15了,表达式spam+15就会被估值计算为15+5,然后把结果20送回。在表达式里头,那些变量的值会被提取出来,参与计算。(所以表达式不是仅仅是两个值类型的数做运算)

变量覆盖

(不要吐槽这个小标题,因为你知道么当年就关于这个词应该怎么表达,我们都吵了几个星期,最后才定下来的)

当一个变量已经赋过值,但是需要改动这个变量的值的时候,这就是变量覆盖了。请看例子:

第一次我们输入spam+5的时候,结果返回是20,因为spam里头我们存储的是15.但是我们执行了spam=3的时候,原来存在spam的值就变成了3,意味着15被3覆盖了。所以,你再次执行spam+5的时候,返回值就是8,这个时候spam+5就相当于3+5,spam的旧值已经不见了。

想知道现在某个变量的值是多少,只需要在命令行里头敲入该变量就是了

你可能会感到迷惑,为什么一个变量也可以是一个表达式?原因就是这样,变量存储的东西可以被取出变成一个表达式,还记得以前一个整型值就是一个表达式的概念么?

延伸一下,我们不妨考虑一下,在赋值语句的时候,在表达式一端也用上我们的变量:

这句话spam=spam+5的意思其实就是说,spam的新值等于当前值加上5。记住等号的左边是要赋值的变量,等号的右边的要计算的表达式。通过这个方式我们可以让spam持续的增长:

使用多个变量

其实,在我们的程序里头,通常都会有很多变量,你想要多少就有多少。比如,我们给以下两个变量fizz和eggs赋值:

此时,fizz的值是10,而eggs的值是15.


让我们尝试给变量spam赋个新值,敲入spam=fizz+eggs,回车之后再敲入spam,看看命令后输出什么:

也就是说spam的值已经变成25了,是因为我们表达式fizz+eggs已经告诉计算机把存在变量里头的值拿出来相加了。

变量名

名字对我们很重要,但是对计算机来说,他们是不关心的。给变量命名反映的不仅是值的数据类型,更重要的是让人更明白程序的运行机制。比起name这样无意义的变量名来说,我们更应该用abrahamLincoln或者monkey这样的名字。虽然无论你怎么命名,只要程序写对了,计算机都会正确运行。

对于Python来说,变量名也是大小写敏感的(对Python而言,所有出现字符的时候都是大小写敏感的)。大小写敏感意味着,拼写相同变量,只要某个字符大小写不一样,那就会被认为是不同的变量。所以spam,SPAM,Spam和sPAM就是4个独立的不相干的变量,存储着各自的不同的值。

实话说,在一个程序里头,拼写相同但是大小写不同的变量是不应该出现的,那么做会是个灾难。比如你把你的姓存在变量NAME,把名字存在变量name中,你刚开始写这个程序的时候,你会很清楚,但是过后你要重新阅读的时候,你就会抓狂了。

Camel Case

(这个没法翻译,这就是个名字,翻译成骆驼风格,整个人都不好了)这个命名风格要求如果变量里头包含了多个英文单词的时候,最好把这个单词的首字母大写。请看例子,比如我要命名一个这样的变量whatIHadForBreakfast,来存储我早餐吃了什么,是不是比whatihadforbreakfast好多了。这就是Camel Case,为什么叫骆驼风格呢,你看那些夹杂着大写的变量名是不是很像驼峰(哈哈哈,这就是西方的幽默,我也不知道哪里好笑)。这是一个在Python里头很方便也很常用的东西,虽然你可以不这么做,但是做事情要有规矩,命名也就是个规矩。多个单词组成的变量,从第二个单词开始首字母大写会大大增强代码的可读性(纳尼,我的程序为什么要给人家读,小样的,不然你以后自己读起来也痛苦)。

作业时间

1.下面的代码输出的是啥?

>>> spam = 20

>>> spam

2.下面的代码输出的又是啥?

>>> spam = 20

>>> spam = 30

>>> spam

3.下面的代码输出的又是啥?

>>> spam  20

>>> spam = spam + 20

>>> spam

4.下面的代码输出的又是啥?

>>> spam = 20

>>> spam + 20

40

>>> spam

5.下面的代码输出的又是啥?

>>> spam = 20

>>> SPAM = 30

>>> spam

6.下面的代码输出的又是啥?

>>> spam =

7.下面的代码输出的又是啥?

>>> monkeyplumber

8.下面的代码那些是表达式,那些是语句?

>>> 2 + 2

4

>>> spam = 42

9.下面的代码那些是表达式还是语句?

>>> 5

5

答案:1.20;2.30;3.40;4.20;5.20;6.程序会出错,因为变量赋值语句缺失值;

7.程序出错,因为变量没有定义;8.2+2是表达式,spam=42是语句;9.表达式

为何破解密码的内容还未到?

很快就到了,我们不会学太多的预备知识,我们还有一个章节编程的内容需要学习.

本章节你学到了Python语言的基本的编程知识,以及如何在命令行里头执行代码.Python语言需要你告诉计算机应该怎么去做,计算机没有常识不会明白你的言语,只能通过一些简单的指令去工作.你已经学习了估值表达式,这个东东就是值和操作符号(正如+和-)的集合.同时你知道了你如何能把某个值存到变量里头,以便下次使用.

命令行是学习Python一个很有用的工具,因为每次你敲了语句都可以看到执行的结果.让我们到下一个章节,掌握了更多的基础知识,你就可以完成你的第一个程序了.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容