《python基础教程(第三版)》第一章 基础知识

学了吴恩达老师的视频,发现自己的代码真的很不ok啊!!!!!!!所以觉得把python基础教程这本书仔仔细细看完,然后开始记录下一本书!!!下面都是我自己记录的啊 (只对我认为的重点进行记录),可能会有雷同!!!但是都是一本书啊!!!!!!有问题提出来啊!!让我们荡起双桨,让我们推开波浪,一起进步哈哈哈哈哈哈哈哈哈哈

1.1 交互式解释器

这一小节讲得好简单的,讲了一些重点:
在python总不需要每行末尾都加上分号
遇到不懂的问题,可以输入命令help()

1.2 算法

这一本书中把算法讲得很通熟易懂。
算法只不过是流程或菜谱的时髦说法,请看下面的菜谱:

鸡蛋火腿肠:先取一些火腿肠。再加些火腿肠和鸡蛋。
如果喜欢吃辣,加些辣味火腿肠。
煮熟为止。记得每隔10分钟检查一次。

是不是讲得很通俗易懂。这个菜谱的结构很有启发性。它由一系列必须按顺序执行的操作说明组成,其中有些可直接完成(取些火腿肠),有些需要特别注意(如果喜欢吃辣),还有一些需要重复多次(每隔10分钟检查一次)。

菜谱和算法都由原料(对象)和操作说明(语句)组成。在这个示例中,火腿肠和鸡蛋是原料,而操作说明包括添加火腿肠、烹饪指定的时间等。下面来介绍一些简单的python原料。

1.3 数和表达式

一些很简单的操作这里就跳过了。

>>> 2+2
4
>>> 646+38373
39019
>>> 1/2
0.5
>>> 1/1
1.0

从上面的代码结果,你会发现同样是整数的运算,除法运算的结果会有小数点,即浮点数(float或floating-point number)

如果你想丢弃小数部分,即执行整数运算,可使用双斜杠。

>>> 1//2
0
>>> 1//1
1
>>> 5.0//2.4
2.0

看到最后一个结果为2.0,因为你输入的,就是小数点后一位,即使你是这样输入,虽然结果也会是小数点的后一位,但是也会被丢弃小数部分,所以5.0//2.4会是2.0。

求余与取整

>>> 1%2
1

上面代码中的%是求余(求模)运算符。x%y的结果为x除以y的余数。换而言之,结果为执行整除时余下的部分,即x%y等价于x-((x//y*y)。看下面的例子会更好理解。

>>> 10//3
3
>>> 10%3
1
>>> 9//3
3
>>> 9%3
0
>>> 2.75%0.5
0.25

从最后一个示例可知,求余运算符也可用于浮点数。这种运算符甚至可用于负数,但可能不那么好理解。
我们先来理解整除,整除理解通透后,求余可以通过x-((x//y*y)这个公式来计算,就好理解很多啦。

>>> 10//3
3
>>> 10//-3
-4
>>> -10//3
-4
>>> -10//-3
3

先看第一条公式,10//3(10整除3),正常来说10/3=3.33....,但是既然用了//那么结果就会丢弃小数部分,在python中,对于整除运算,python是取向下圆整的结果(取比原数据小的那个整数),所以3.33向下圆整就是3,10//3的结果就是3。
再看第二条10//-3,正常来说10//-3=-3.33....,然后向下取整,取比-3.333...小的整数,就是-4啦
讲到这里取整应该大概懂了吧!!!!然后求余的时候就代入x-((x//y*y)这个公式来计算。

求幂

其实求幂很好懂啦,在下面我放几个例子就能懂啦

>>> 2**3
8
>>> -3**2
-9
>>> (-3)**2
9

1.4 变量

变量表示(或指向)特定值的名称。例如,你可能想使用名称x来表示3,为此执行如下代码:

>>> x=3

这称为赋值(assignment),我们将值3赋给了变量x。换而言之,就是将变量x与值(或对象)3关联起来。给变量赋值后,就可在表达式中使用它。

不同于其他一些语言,使用python变量前必须给它赋值,因为python变量没有默认值。

注意:在python中,名称(标识符)只能由字母、数字和下划线(_)构成,且不能以数字大头。

1.6 获取用户输入

下面介绍一个有用的函数input

>>> input("The meaning of life :")#在键盘中输入45,然后按回车
The meaning of life :45
'45'

本小节提前讲了if语句。
通过使用if语句,可在给定条件满足时执行特定的操作(另一条语句)。一种条件是使用相等运算符(==)表示的相等性检查。相等运算符就是两个等号(一个等号用于赋值)

>>> if 1==2 : print('One equals two')
...
>>> if 1==1 : print('One equals one')#相等才会有结果输出
...
One equals one

看到上面的代码我们可以知道,当条件不满足时,什么都不做,当条件满足时,就会执行冒号后面的语句(即代码中的print语句)。需要注意的另一点是,在交互式解释器中输入if语句后,需要按两次回车键才能执行。

1.7 函数

在python中提供了很多函数,可以用来完成很多神奇的任务。实际上,你也可以自己编写函数(这个后面会详细说)。

>>> pow(2,3)
8

我们通常将pow等标准函数称为内置函数,这种使用函数的行为称为调用函数:你向它提供实参(这里是2和3),而它返回一个值。实际上,我们可以结合使用函数调用和元素符来编写更复杂的表达式。

>>> 10+pow(2,3*4)/3
1375.3333333333333

有很多内置函数可用于编写数值表达式。

>>> abs(-20)#取绝对值
20
>>> 2//3#结果向下圆整
0
>>> round(2/3)#四舍五入
1

这里我们需要注意一点,在python中,整数总是向下圆整的,但是round函数是四舍五入函数,就和我们平时的四舍五入一样,round(3.6)=4。完成向下圆整这个任务有其他函数,例如floor可以完成,但是你要导入模块,下面会讲到。

1.8 模块

我们可以将模块视为扩展,通过将其导入可以扩展python功能,要导入模块,可使用特殊命令import。前一小节体积的函数floor就包含在模块math中。

>>> floor(2/3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'floor' is not defined
>>> import math
>>> math.floor(3.6)
3
>>> round(3.6)
4
>>> int(3.6)
3
>>> float(3)
3.0

当我们直接使用floor函数时,会报错,因为我们没有导入模块,当我们导入模块后,就可以使用floor函数了,从上面代码上也可以看出floor函数和round函数的区别。当然int也是取整数的作用。但是int只是用于转换类型,把3.6转换成整数3,类似的还有str、float等。int、str、float并不是函数,而是类(后面会详细介绍)。

模块math还包含其他几个很有用的函数。例如,ceil与floor相反,返回大于或等于给定数的最小整数。

>>> math.ceil(32.3)#返回大于或等于给定数的最小整数
33
>>> math.ceil(32)
32
>>> math.floor(32.3)#向下圆整
32

如果确定不会从不同模块导入多个同名函数,你可能不想每次调用函数时都指定模块名。在这种情况下,可使用命令import的如下变种:

>>> from math import floor

通过from module import function,可在调用函数时不指定模块前缀。

注意:事实上,可以使用变量来引用函数和模块。执行赋值语句foo=math.sqrt后,就可使用foo来计算平方根。

>>> import math as ma#使用变量ma来引用模块math
>>> ma.floor(3.6)
3
>>> foo=ma.floor#使用变量foo来引用函数floor
>>> foo(3.6)
3

1.8.1 cmath和复数

>>> from math import sqrt
>>> sqrt(-1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error

当我们在math模块中导入sqrt并使用时,当输入的数字是负数时,会出现以上报错。
如果我们坚持将值域限定为实数,并使用其近似的浮点数实现,就无法计算负数的平方根。负数的平方根为虚数,而由实部和虚部组成的数为复数。Python标准库提供了一个专门用于处理复数的模块cmath。

>>> import cmath
>>> cmath.sqrt(-1)
1j

注意到这里没有使用from ... import ...。如果使用了这种import命令,将无法使用常规函数sqrt。类似这样的名称冲突很隐蔽,因此除非必须使用from版的import命令,否则应坚持使用常规版import命令。
1j是个虚数,虚数都以j(或J)结尾。复数算术运算都基于如下定义:-1的平方根为1j。虚数同样也可以计算。

>>> (1+3j)*(9+4j)
(-3+31j)

python本身提供了对复数的支持,但是python没有专门表示虚数的类型,而将虚数视为实部为零的复数。

1.8.2 回到未来

据说Python之父Guido van Rossum有一台时光机,因为这样的情况出现了多次:大家要求Python提供某项功能时,却发现这项功能早已实现。当然,并非什么人都能进入这台时光机,不过Guido很体贴,通过神奇模块future让Python具备了时光机的部分功能。对于Python当前不支持,但未来将成为标准组成部分的功能,你可从这个模块进行导入。
Python提供了future模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中测试一些新版本的特性。这个后面也会慢慢用到。

1.9 执行程序

当你在cmd或者linux上运行python.py文件时,你只需要输入:

python python.py

1.10 字符串

1.10.1 单引号字符串与双引号

在python中使用单引号和双引号是没有任何差别的。但是当你在语句中有单引号时,你应该在引号前加上\

>>> 'let's go'
  File "<stdin>", line 1
    'let's go'
         ^
SyntaxError: invalid syntax
>>> 'let\' go'
"let' go"

1.10.2 拼接字符串

直接看例子!

>>> "hello,""world"
'hello,world'
>>> x='hello,'
>>> y='world'
>>> x y
  File "<stdin>", line 1
    x y
      ^
SyntaxError: invalid syntax
>>> x + y
'hello,world'

1.10.3 字符串表示str和repr

Python打印所有的字符串时,都用引号将其括起。你可能通过前面的示例发现了这一点。这是因为Python打印值时,保留其在代码中的样子,而不是你希望用户看到的样子。但如果你使用print,结果将不同。

>>> "hello,world!"
'hello,world!'
>>> print("hello,world!")
hello,world!

如果再加上表示换行符的编码\n,差别将更明显。

>>> "hello,\nworld!"
'hello,\nworld!'
>>> print("hello,\nworld!")
hello,
world!

通过两种不同的机制将值转换成了字符串。你可通过使用函数str和repr①直接使用这两种机制。使用str能以合理的方式将值转换为用户能够看懂的字符串。例如,尽可能将特殊字符编码转换为相应的字符。然而,使用repr时,通常会获得值的合法Python表达式表示。

>>> print(repr("hello,\nworld!"))
'hello,\nworld!'
>>> print(str("hello,\nworld!"))
hello,
world!

1.10.4 长字符串、原始字符串和字节

有一些独特而有用的字符串表示方式。例如,有一种独特的语法可用于表示包含换行符或反斜杠的字符串(长字符串和原始字符串)。对于包含特殊符号的字符串,Python 2还提供了一种专用的表示语法,结果为Unicode字符串。这种语法现在依然管用,但是多余,因为在Python 3中,所有的字符串都是Unicode字符串。Python 3还引入了一种新语法,用于表示大致相当于老式字符串的字节对象。你将看到,在处理Unicode编码方面,这种对象依然扮演着重要的角色。
1、长字符串
要表示很长的字符串(跨越多行的字符串),可使用三引号(而不是普通引号)。

>>> print('''This is a very long string. It continues here.
... And it's not over yet. "Hello, world!"
... Still here.''')
This is a very long string. It continues here.
And it's not over yet. "Hello, world!"
Still here.

还可使用三个双引号,如"""like this"""。请注意,这让解释器能够识别表示字符串开始和结束位置的引号,因此字符串本身可包含单引号和双引号,无需使用反斜杠进行转义。

注意:只要在行尾加上反斜杠,反斜杠和换行符将被转义,即被忽略。

>>> print \
... (2+2)
4

2、原始字符串
原始字符串不以特殊方式处理反斜杠,因此在有些情况下很有用②。在常规字符串中,反斜杠扮演着特殊角色:它对字符进行转义,让你能够在字符串中包含原本无法包含的字符。例如,

>>> print('hello,\nworld1!')
hello,
world1!

\n表示换行符。
但在有些情况下,并非你想要的结果。如果你要在字符串中包含\n呢?例如,
你可能要在字符串中包含DOS路径C:\nowhere。

>>> path = 'C:\nowhere'
>>> path
'C:\nowhere'

这好像没问题,但如果将其打印出来,就会出现问题。

>>> print(path)
C:
owhere

这并非你想要的结果,不是吗?那该怎么办呢?可对反斜杠本身进行转义。

>>> print('C:\\nowhere')
C:\nowhere

在这样的情况下,原始字符串可派上用场,因为它们根本不会对反斜杠做特殊处理,而是让字符串包含的每个字符都保持原样。
还有一种方法就是用前缀r表示。

>>> print(r'C:\nowhere')
C:\nowhere

看起来可在原始字符串中包含任何字符,这大致是正确的。一个例外是,引号需要像通常那样进行转义,但这意味着用于执行转义的反斜杠也将包含在最终的字符串中。

>>> print(r'Let\'s go!')
Let\'s go!

另外,原始字符串不能以单个反斜杠结尾。换而言之,原始字符串的最后一个字符不能是反斜杠,除非你对其进行转义(但进行转义时,用于转义的反斜杠也将是字符串的一部分)。根据前一个示例,这一点应该是显而易见的。如果最后一个字符(位于结束引号前面的那个字符)为反斜杠,且未对其进行转义,Python将无法判断字符串是否到此结束。

>>> print(r'Let\'s go!\')
  File "<stdin>", line 1
    print(r'Let\'s go!\')
                         ^
SyntaxError: EOL while scanning string literal

这合乎情理,但如果要指定以反斜杠结尾的原始字符串(如以反斜杠结尾的DOS路径),该如何办呢?本节介绍了大量技巧,应该能够帮助你解决这个问题,但基本技巧是将反斜杠单独作为一个字符串,下面是一个简单的示例:

>>> print(r'C:\Program Files\foo\bar' '\\')
C:\Program Files\foo\bar\

请注意,指定原始字符串时,可使用单引号或双引号将其括起,还可使用三引号将其括起。

小结

算法:算法犹如菜谱,告诉你如何完成特定的任务。从本质上说,编写计算机程序就是使用计算机能够理解的语言(如Python)描述一种算法。这种对机器友好的描述被称为程序,主要由表达式和语句组成。

表达式:表达式为程序的一部分,结果为一个值。例如,2 + 2就是一个表达式,结果为4。简单表达式是使用运算符(如+或%)和函数(如pow)将字面值(如2或"Hello")组合起来得到的。通过组合简单的表达式,可创建复杂的表达式,如(2 + 2) *(3 - 1)。表达式还可能包含变量。

变量:变量是表示值的名称。通过赋值,可将新值赋给变量,如x = 2。赋值是一种语句。

语句:语句是让计算机执行特定操作的指示。这种操作可能是修改变量(通过赋值)、将信息打印到屏幕上(如print("Hello, world!"))、导入模块或执行众多其他任务。

函数:Python函数类似于数学函数,它们可能接受参数,并返回结果(在第6章学习编写自定义函数时,你将发现函数实际上可以在返回前做很多事情)。

模块:模块是扩展,可通过导入它们来扩展Python的功能。例如,模块math包含多个很有用的函数。

程序:你通过练习学习了如何编写、保存和运行Python程序。

字符串:字符串非常简单。它们其实就是一段文本,其中的字符是用Unicode码点表示的。然而,对于字符串,需要学习的知识有很多。本章介绍了很多表示字符串的方式,第3章将介绍众多字符串用法。

函数总结



在上表中,方括号内的参数是可选的

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

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,618评论 0 10
  • Python 简介Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设...
    在暴风雨中逆袭阅读 1,656评论 0 12
  • 基于《Python语言程序设计基础(第2版)》 第一部分 初识Python语言 第1章 程序设计基本方法 1.1 ...
    柄志阅读 27,155评论 4 44
  • 时光慢点, 让我陪你慢慢变老, 就似你陪我慢慢长大。 我在, 保你安享晚年, 恰如当年你让我衣食无忧。 岁月静好,...
    悠然mafengxian阅读 311评论 3 10
  • 我们现在所称的宇宙栋梁起来源乃是经弗雷曼人 改造的宗教 他们的齐扎拉 塔菲德 带着启示 证言和语言来到我们之中 他...
    羊咩的内心拥有一头狼阅读 211评论 0 0