python教程基础知识_《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 "", line 1, in

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 "", line 1, in

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 "", 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 "", 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 "", 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章将介绍众多字符串用法。

函数总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值