目录
1.1 交互式解释器
1.1.1 第一个Python程序
>>> print("Hello World!")
Hello World!
1.1.2 关于简单语法
>>>是提示符,可在它后面输入一些内容
如果你输入print("Hello, world!")并按回车键,Python解释器将打印字符串"Hello, world!",然后再次显示提示符。
如果输入不符合语法
解释器没有看懂1(如果你运行的不是IDLE,而是Linux命令行解释器,错误消息可能稍有不同)。解释器还指出了问题出在什么地方:使用红色背景色(在命令行解释器中,使用的是脱字符号^)突出单词Spanish。
>>> hello world
File "<stdin>", line 1
hello world
^
SyntaxError: invalid syntax
注意:
invalid 无效; Syntax 语法
如果你熟悉其他计算机语言,可能习惯了在每行末尾都加上分号。在Python中无需这样做,因为在Python中,一行就是一行。
1.2 算法是什么
算法只不过是流程或菜谱的时髦说法,详尽地描述了如何完成某项任务。
1.2.1 生活中的算法
鸡蛋火腿肠:先取一些火腿肠。 再加些火腿肠和鸡蛋。 如果喜欢吃辣,加些辣味火腿肠。 煮熟为止。记得每隔10分钟检查一次。 |
它由一系列必须按顺序执行的操作说明组成,其中有些可直接完成(取些火腿肠),有些需要特别注意(如果喜欢吃辣),还有一些需要重复多次(每隔10分钟检查一次)。
菜谱和算法都由原料(对象)和操作说明(语句)组成。在这个示例中,火腿肠和鸡蛋是原料,而操作说明包括添加火腿肠、烹饪指定的时间等。
1.3 数和表达式
1.3.1 Python的四则运算(加减乘除余)
Python支持四则远算,且能判断优先级
Python默认运算结果为浮点数(float,floating-point number)
>>> 1.2+3.4
4.6
>>> 1+2*3
7
>>> (1+2)*3
9
>>> 1/2
0.5
>>> 1/3
0.3333333333333333
>>> 7%3
1
1.3.2 除法商取整
如果要丢弃小数部分,执行取整运算,可使用双斜杆
>>> 7/3
2.3333333333333335
>>> 7//3
2
对于整除运算,需要明白的一个重点是它向下圆整结果。因此在结果为负数的情况下,圆整后将离0更远。这意味着对于-10 // 3,将向下圆整到-4,而不是向上圆整到-3。
>>> 10//3
3
>>> 10//-3
-4
>>> -10//3
-4
>>> -10//-3
3
1.3.3 乘方运算(求幂)
>>> 2**3
8
>>> 3**3
27
>>> 2**0.5
1.4142135623730951
1.3.4 进制转换
2进制:满2进1 , 0b10
8进制:满8进1 , 0o10
10进制:满10进1 , 10
16进制:满16进1 , 0x10
>>> 0b10
2
>>> 0o10
8
>>> 10
10
>>> 0x10
16
bin() 转2进制方法
oct() 转8进制方法
int() 转10进制方法
hex() 转16进制方法
>>> bin(2)
'0b10'
>>> oct(8)
'0o10'
>>> int(10)
10
>>> hex(16)
'0x10'
1.4 变量
变量:表示(或指向)特定值的名称。
赋值:将变量x与值(或对象)关联起来。给变量赋值后,就可在表达式中使用它。
变量名命名规则:只能由字母、数字和下划线(_)构成,且不能以数字打头。
注意:不同于其他一些语言,使用Python变量前必须给它赋值,因为Python变量没有默认值。
>>> x=10
>>> y=3
>>> x+y
13
>>> x-y
7
>>> x*y
30
>>> x/y
3.3333333333333335
>>> x%y
1
>>> x//y
3
1.5 语句
表达式和语句
表达式是一些东西,而语句做一些事情。
>>> #表达式
... 2*2
4
>>> #语句
... print(2*2)
4
注意:这个表达式确实会执行一些操作:计算2和2的乘积。但既不会将结果保存起来,也不会向用户显示它。因此除执行计算外,没有其他任何作用。
1.6 获取用户输入
这个数被input(以文本或字符串的方式)返回,并在最后一行被自动打印出来。通过使用int将字符串转换为整数。
>>> x=input("x: ")
x: 12
>>> y=input("y: ")
y: 34
>>> print(int(x)+int(y))
46
1.7 函数
pow(x, y) 返回x的y次幂
abs(x) 返回x的绝对值
round(x,y) 返回x保留y位小数
math.floor(x) 返回向下取整
math.ceil(x) 返回向上取整
>>> pow(2,3)
8
>>> abs(-6.54321)
6.54321
>>> round(3.14159265354,2)
3.14
>>> round(3.56)
4
>>> import math
>>> math.floor(3.56)
3
>>> math.ceil(3.56)
4
1.8 模块
可将模块视为扩展,通过将其导入可以扩展Python功能。要导入模块,可使用特殊命令import。
>>> #清空屏幕
>>> import os
>>> os.system('cls')
工作原理:我们使用import导入模块,再以module.function的方式使用模块中的函数。
如果确定不会从不同模块导入多个同名函数,你可能不想每次调用函数时都指定模块名。在这种情况下,可使用命令import的如下变种:
>>> import math
>>> math.sqrt(9)
3.0
>>> from math import sqrt
>>> sqrt(9)
3.0
通过使用命令import的变种from module import function,可在调用函数时不指定模块前缀。
注意:可使用变量来引用函数(以及其他大部分Python元素)。执行赋值语句foo = math.sqrt后,就可使用foo来计算平方根。例如,foo(4)的结果为2.0。
1.8.1 实数与虚数
math 处理实数相关计算
cmath 处理虚数相关计算
>>> import math
>>> math.sqrt(-1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> import cmath
>>> cmath.sqrt(-1)
1j
>>> cmath.sqrt(2)
(1.4142135623730951+0j)
注意:1j是个虚数,虚数都以j(或J)结尾。复数算术运算都基于如下定义:-1的平方根为1j。
>>> (1+3j)*(9+4j)
(-3+31j)
1.9 保存并执行程序
序号 | 动作 | 操作路径 | 备注 |
1 | 新建 | 【File】——【New File】 | |
2 | 保存 | 【File】——【Save】 | 尾缀名为*.py |
3 | 打开 | 【File】——【Open】 | |
4 | 执行 | 【Run】——【Run Module】 |
注意:推荐使用IDLE
IDLE:是Python软件包自带的一个集成开发环境,初学者可以利用它方便地创建、运行、测试和调试Python程序。
name=input("What is your name?\n")
print("Hello,"+name+"!")
>>>What is your name?
Tony
Hello,Tony!
#强大的海龟绘图法
from turtle import *
forward(100)
left(120)
forward(100)
left(120)
forward(100)
1.9.1 从命令提示符运行Python脚本
在Windows系统中
C:\>python hello.py
在Unix系统中
$ python hello.py
1.9.2 让脚本像普通程序一样
在Windows中,扩展名.py是让脚本像普通程序一样的关键所在。请尝试双击前一节保存的文件hello.py。如果正确地安装了Python,这将打开一个DOS窗口,其中包含提示信息What is your name?。
然而,这样运行程序存在一个问题:输入名字后,程序窗口将立即关闭,你根本来不及看清结果。这是因为程序结束后窗口将立即关闭。尝试修改脚本,在末尾添加如下代码行:
name=input("What is your name?\n")
print("Hello,"+name+"!")
input("press<enter>")
What is your name?
Tony
Hello,Tony!
press<enter>
1.9.3 注释
单行注释:井号(#),右边的任何数据都会被忽略
批量多行注释:''' ”””
1.10 字符串
1.10.1 单引号字符串以及对引号转义
>>> print("Hello World")
>>> print('Hello World')
>>> print("Let's go!")
>>> print('Let\'s go!')
Hello World
Hello World
Let's go!
Let's go!
>>> print(‘Let's go')
File "<stdin>", line 1
print(‘Let's go')
^
SyntaxError: invalid character in identifier
注意:第二个字符串包含双引号,因此必须使用单引号将整个字符串括起,原因和前面一样。实际上,并非必须这样做(这样做只是出于方便考虑)。可使用反斜杠(\)对引号进行转义
1.10.2 拼接字符串
>>> x="Hello"
>>> y="World"
>>> x y
File "<stdin>", line 1
x y
^
SyntaxError: invalid syntax
>>> x+y
'HelloWorld'
1.10.3 字符串表示str和repr
>>> "Hello World"
'Hello World'
>>> print("Hello World")
Hello World
使用str能以合理的方式将值转换为用户能够看懂的字符串
使用repr时,通常会获得值的合法Python表达式表示
>>> "Hello \n World"
'Hello \n World'
>>> print("Hello \n World")
Hello
World
>>>
>>> print(repr("Hello \n World!"))
'Hello \n World!'
>>> print(str("Hello \n World!"))
Hello
World!
1.10.4 长字符串、原始字符串和字节
(1)长字符串
要表示很长的字符串(跨越多行的字符串),可使用三引号(而不是普通引号)。
还可使用三个双引号,如"""like this"""。请注意,这让解释器能够识别表示字符串开始和结束位置的引号,因此字符串本身可包含单引号和双引号,无需使用反斜杠进行转义。
常规字符串也可横跨多行。只要在行尾加上反斜杠,反斜杠和换行符将被转义,即被忽略。
print('''This is a long string. It continues here.
And it's not over yet.
"Hello World!"
Still here.''')
运行结果
This is a long string. It continues here.
And it's not over yet.
"Hello World!"
Still here.
(2)原始字符串
原始字符串不以特殊方式处理反斜杠,因此在有些情况下很有用。在常规字符串中,反斜杠扮演着特殊角色:它对字符进行转义,让你能够在字符串中包含原本无法包含的字符。
(3)Unicode、bytes和bytearray
Python字符串使用Unicode编码来表示文本。
大致而言,每个Unicode字符都用一个码点(code point)表示,而码点是Unicode标准给每个字符指定的数字。
指定Unicode字符的通用机制:使用16或32位的十六进制字面量(分别加上前缀\u或\U)或者使用字符的Unicode名称
在内存和磁盘中,所有对象都是以二进制数字(0和1)表示的(这些数字每8个为一组,即1字节)
>>> len("How long is this?".encode("UTF-8"))
17
>>> len("How long is this?".encode("UTF-32"))
72
1.11 小结
1.11.1 相关概念
- 算法:算法犹如菜谱,告诉你如何完成特定的任务。从本质上说,编写计算机程序就是使用计算机能够理解的语言(如Python)描述一种算法。这种对机器友好的描述被称为程序,主要由表达式和语句组成。
- 表达式:表达式为程序的一部分,结果为一个值。例如,2 + 2就是一个表达式,结果为4。简单表达式是使用运算符(如+或%)和函数(如pow)将字面值(如2或"Hello")组合起来得到的。通过组合简单的表达式,可创建复杂的表达式,如(2 + 2) *(3 - 1)。表达式还可能包含变量。
- 变量:变量是表示值的名称。通过赋值,可将新值赋给变量,如x = 2。赋值是一种语句。
- 语句:语句是让计算机执行特定操作的指示。这种操作可能是修改变量(通过赋值)、将信息打印到屏幕上(如print("Hello, world!"))、导入模块或执行众多其他任务。
- 函数:Python函数类似于数学函数,它们可能接受参数,并返回结果(在第6章学习编写自定义函数时,你将发现函数实际上可以在返回前做很多事情)。
- 模块:模块是扩展,可通过导入它们来扩展Python的功能。例如,模块math包含多个很有用的函数。
- 程序:你通过练习学习了如何编写、保存和运行Python程序。
- 字符串:字符串非常简单。它们其实就是一段文本,其中的字符是用Unicode码点表示的。然而,对于字符串,需要学习的知识有很多。本章介绍了很多表示字符串的方式,第3章将介绍众多字符串用法。
1.11.2 几个函数
序号 | 函数 | 描述 |
1 | abs(number) | 返回指定数的绝对值 |
2 | bytes(string, encoding[, errors]) | 对指定的字符串进行编码,并以指定的方式处理错误 |
3 | cmath.sqrt(number) | 返回平方根;可用于负数 |
4 | float(object) | 将字符串或数字转换为浮点数 |
5 | help([object]) | 提供交互式帮助 |
6 | input(prompt) | 以字符串的方式获取用户输入 |
7 | int(object) | 将字符串或数转换为整数 |
8 | math.ceil(number) | 以浮点数的方式返回向上圆整的结果 |
9 | math.floor(number) | 以浮点数的方式返回向下圆整的结果 |
10 | math.sqrt(number) | 返回平方根;不能用于负数 |
11 | pow(x, y[, z]) | 返回x的y次方对z求模的结果 |
12 | print(object, ...) | 将提供的实参打印出来,并用空格分隔 |
13 | repr(object) | 返回指定值的字符串表示 |
14 | round(number[, ndigits]) | 四舍五入为指定的精度,正好为5时舍入到偶数 |
15 | str(object) | 将指定的值转换为字符串。用于转换bytes时,可指定编码和错误处理方式 |