导学

在正课开始之前对所要学习的内容进行梳理。

主要内容–7个部分

变量

变量

数字类型

数字类型

字符串

字符串

基本输入输出

IOP

编程规范

编码规范

编码格式

编码格式

两个实例

实例

目标和要求

目标和要求

在本节,要求完成第一个实训作业:turtle作品,会阅读官方文档。


下面我们就按照上面的规划进行深入的学习——>


2.1 变量

下面给出本小节思维导图

思维导图-2.1

变量的定义

  • 在编程语言的学习中,变量是最基础的东西。
  • 与其他语言不同的是,Python是一个弱类型语言,不需要事先声明变量名及其类型,直接赋值即可创建各种类型的对象变量。
  • 使用type(x)查看对象类型

eg1

Python采用基于值的内存管理方式

  • 为不同变量赋予相同的值,那么这个值在内存中只有一份,多个变量执行同一块内存地址
  • 使用id(x)获取对象x的内存地址

一个地址

eg2.1

变量的命名规范

一个规范的变量名应该符合以下6条规则(最后一条是更深的要求):

  • 以字母、下划线开头,后面可以跟任意字母、下划线、数字
  • 变量名不能以数字开头
  • 变量名对字母大小写敏感
  • 不可以有空格以及标点符号
  • 不可以使用关键字或者内置函数作为变量名
  • 作为一名合格的程序员,变量的命名要与其含义相关,尽量不要使用简单的字母命名,一时的便利会带来长久的麻烦。(所以要学号英语哦)

查看关键字和内置函数

上面我们已经提到变量的命名规则,其中有一条是不可使用关键字和内置函数。在实际的编程中,我们可以一些帮助文档进行查看。

  1. 关键字的查看:help('keywords')
    关键字

注:使用import keyword —> keyword.kwlist也可以看到。
使用len()可以得到关键字的个数:35个
(len属于内置函数,解释器启动既有;而内置模块需要import)

  1. 内置函数的查看: import builtins —> dir(builtins)
    ps:该模块提供对Python的所有“内置”标识符的直接访问
    内置函数

常量

  • 常量在指定初始值后不再改变
  • 一般使用大写字母表示
  • 遵循常量阅读,使得代码具有良好的可读性(PI = 3.14等)

2.2数字类型

本小节思维导图

思维导图2.2

ps:本节要求掌握基本数字类型的表示与进制之间的转换

  • Python中的数据类型很多,比如数字、字符串、列表、字典、文件等基本数据类型
  • 数据类型和值相关,而不是和变量相关。(基于值的内存管理模式)
  • 数字类型包括:整数、浮点数、复数

整数、浮点数、复数

整数和浮点数

  • 整数和浮点数的差异在于是否包含小数部分
  • 浮点数必须包含一个小数点,否则会被当做整数
  • int 表示整数;float表示浮点数

差异

浮点数补充——>

浮点数有两种表示形式:

  • 十进制形式,例如:3.14 5.21等
  • 科学计数形式:5.21e2或5.21E2 就是指5.21* 10^2

注:只有浮点数可以使用科学计数的方法
并且如果运算是既有整数又有浮点数,结果为浮点数。

复数

复数的虚部用j或J表示:a=3+4j
使用 x.realx.imag获取实部、虚部的数值,以浮点数的形式输出。

表示和运算

进制之间的转换

整数的表示方法

一个整数可以采用多种进制进行表示:

  • 十进制
  • 二进制 0b或者0B
  • 八进制 0o或者0O
  • 十六进制 0x或者0X

不同进制之间可以进行转换(使用Python的内置函数)

  • int(x, d) —> 接收的是字符串x,转换d进制的整数为十进制
  • bin(x) —> 将十进制数x转换为二进制
  • oct(x) —> 将十进制数x转换为八进制
  • hex(x) —> 将十进制数x转换为十六进制

eg2.2.2

内置模块

Python中含有很多标准库,也就是封装好的已有的代码合集。
Python中的标准库被组织为模块,相关的函数和数据类型被分组封装在不同的模块中,需要使用时需要进行模块的导入

内置模块–math

import math导入模块

math模块

注:使用dir(math)查看math模块下的内置函数
dir

内置模块–random

random,random()随机生成一个实数,在[0, 1]范围
random.randint(a, b)用于生成一个指定范围的整数。(前闭后开)

eg2.2.3

2.3 字符串

下面给出本节思维导图

思维导图2.3

  • 字符串也是Python中最常用的数据类型
  • 文本就是由一些列字符组成的字符串

字符串的表示

字符串可以使用单引号(‘…’) 或者双引号(“…”) 表示—->

eg2.3.1

对于字符串中含有引号的形式,需要进行特殊处理:—->

  • 第一种方法:使用不同的引号将字符串括起来。

eg1

  • 第二种方法:使用三引号

eg2

  • 第三章方法:使用转义字符\,在引号之前使用\进行转义

eg3

注:使用\n可以实现换行输出

原始字符串的使用—->

如果我们输出的字符串含有\符号,那么处理可以使用转义字符外,还可以在字符串前加上r,就表示原始字符串,不会把\当成特殊符号。
eg

字符串的常用操作

思维导图如下:

思维导图

字符串的索引

在Python中,不支持单字符类型,单字符也是作为一个字符串使用。

可以使用索引访问单个字符。

索引

注:通过[x]获取对应位置的单字符,下标从0开始

字符串的拼接

这是最基础的字符串操作:+

拼接

常用的字符串方法

什么是方法?对象的行为称为方法,方法只能用于定义好的对象,函数是独立的操作。
调用对象的方法:对象名.方法名

  • s.lower() 转换为小写形式
  • s.upper() 转换为大写形式
  • s.replace('old', 'new') 内容的替换
  • s.find(p) 查找p,存在返回下标,不存在返回-1

eg

注:通过上例我们可以看见,使用方法后不会改变对象的原始内容

  • 's'.join(str) 以指定的字符‘s’作为分隔符,将字符串str连接成一个新的字符串
  • str.split(s,[num]) 以s为指定的识别分隔符,将str字符串进行分割,num为分割次数。(无参数,默认按照空格进行分割)

eg

注:通过上例我们可以看到,str.split(s, [num])会在字符串里寻找s,并以此为分隔符进行分割,分割过的字符串以引号隔开;而’s’.join(str1)则是将s作为分隔符加入到字符串,形成一个整体。
如果使用str.split()则会自动以空白字符为分隔符。

  • reversed() 内置函数:字符串置逆
    eg

注:在进行分割后再使用置逆,会以分割的部分为整体进行,而不是以一个字符。

字符串的转换

字符串与数字中间的转换

  • str(x):将数字转换为字符串
  • int(x):将字符串x转换为数字
  • int(x,d):将d进制的字符串转换为数字

eg

注:在使用int(x,d)指定d进制时要符合规范,例如:8进制时不可出现8以上数字。

字符串与字符值

在内存,字符是以整数值的形式进行存储的,具体值取决于编码规则。

  • ord():返回字符的值
  • chr():返回给定编码指定的字符

eg

补充内容:删除字符串里的空格(几种方法)

2.4 输入、输出

本节思维导图如下:

思维导图2.4

输入是Input,输出是Output,所以我们把输入输出简写为IO。
用户和计算机程序的交互离不开输入输出。

输出:Output

最基本的输出:print()

作用:以字符的形式向控制台输出结果

eg

print() 可以接受一个或多个字符串,以逗号进行分割,输出时会使用空格进行替代

输出格式:

(使用格式限定符对输出的格式进行美化)

  • %形式
  • str.format()形式

%形式的输出

  • %d 格式化一个整数
  • %f 格式化一个浮点数
  • %s 格式化一个字符串

eg

注: 和C语言类似,小数点后为精度前为宽度,不足以空格替。
但是和C语言不同的是在字符串之后的替换中没有逗号,而是**使用%**进行。

eg

:对应于多个替换,需要使用上图格式。

“{}”.dormat(str)格式化字符串函数

{}叫做替换槽,其中可以指定填充的字符对其方式、替换字符的宽度
其中,^ < > 分别代表中间对齐、左对齐、右对齐

eg

如果是数字,可以在槽里指定数字的格式

eg

:使用:b,o 指定进制格式。

输入:Input

最基本的输入:input

  • 作用:从控制台接收用户信息的输出,并返回字符串
  • 格式: 变量 = input(<提示信息>)
  • 注意:接收到的变量属于字符串形式

eg

格式的转换

我们知道通过input接收的变量为字符串格式,所以如果需要使用数字类型,要使用前面的转换方法。

eg

eval()评估函数

作用:执行一个字符串表达式,并返回计算值
本质:剥离引号

eg

2.5 代码规范

编程语言从某种意义上来说作为一种工具,需要遵循一套编码规范
在PEP8中有具体的描述:https://www.python.org/dev/peps/pep-0008

规范1:缩进

  • 在Python里,使用缩进来体现代码之间的逻辑关系。
  • 同一级别的代码块的缩进必须相同。
  • 一般使用4个空格或者一个Tab作为一个缩进量。

缩进错误

规范2:注释

  • 单行注释:以#开头,其后的内容为注释内容
  • 多行注释:使用三个单引号或者双引号作为开始和结束标识

eg

注:前面我们知道,三引号也可以作为字符串的标识

规范3:换行

如果一个语句太长,可以使用换行符\进行换行
eg

规范4: 必要的空行或空格

  • 运算符两侧、逗号后面建议加一个空格。
  • 不同功能之间的代码块建议之间加一个空行

2.6 字符编码

常用的编码格式:

  • ACSII编码:最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号。这个编码表被称为ASCII编码。
  • GB2312编码:处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII码冲突,所以中国制定了GB2312编码用于处理中文。
  • Unicode编码:使用两个字节表示一个字符,把所有的语言统一到一个编码格式下。
  • UTF-8编码:为了节省空间,出现了“可变长编码”即UTF-8编码,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节。常用的英文字母为1个字节,汉字通常为3个字节,很生僻的字符我为4-6个字节。

eg

:一般我们使用记事本编写代码时,如果使用了中文,记得设置为UTF-8的编码格式。
在开头使用:# coding=utf-8即可进行声明

解码和编码:

综合示例程序:芳名和芳龄

1
2
3
4
5
6
7
8
9
10
11
12
first_name = input("请输入你的姓氏:")
last_name = input("请输入你的名字:")
age = int(input("请输入你的年龄"))

age_10 = age-10
age_10_8 = oct(age_10)
print("十年前你的年龄为:%o(八进制)"%age_10)
print("十年前你的年龄为:{:x}(十六进制)".format(age_10))

full_name = first_name + last_name
print("{:*^10}".format(full_name), "的国标码为:", full_name.encode("GBK"))

注意点:
1、print之中的不同字符串可以使用逗号隔开,不用+
2、进制的转换输出可以直接使用%o,%d,%x。
3、编码格式时要使用引号”GBK”