Python 程序设计语言 笔记(二)

时间:2021-07-22 05:39:10

第二周 类型及应用

2.1类型 —— 编程语言对数据的划分

数字类型、字符串类型、元组类型

列表类型、文件类型、字典类型

(1)数字类型:数字类型对python语言中的数字的表示和使用进行了定义和规范

[1] 分类:整数类型 ② 浮点数类型 ③ 复数类型

① 整数类型概念与数学一致,没有取值范围限制

例:1010(十进制数),0x9a(十六进制数,以0x/0X开头),0b010(二进制数,以0b/0B开头)0o123(八进制数,以0o/0O开头)

② 浮点数类型是带有小数点及小数的数字,数值范围和小数精度有一定限制,因系统而异

例:0.0(与整数0不同),96e4(科学计数法,e/E代表10的次幂,e/E后的数字为指数)

③ 复数类型概念与数学一致,z=a+bj(j/J代表虚数部分)例:12.3+4j

     对于一个复数,如z = 1.1+9j,可以使用z.realz.imag来获得复数的实部和虚部

[2] 数字类型的关系:

← 特例    ← 特例

整数 → 浮点数 → 复数 (范围逐渐扩大)                                整数 浮点数 浮点数

因此这三种数字类型可以进行混合运算,生成结果为最宽类型 例:3 + 4.2  = 7.2

[3] 类型转换:利用int(), float() 和complex() 三个函数实现

例:int(4.5) = 4; float(4) =4.0; complex(4) = 4 + 0j;

【注意】不能将复数转成整数和浮点数!(但可以间接利用取实部虚部的方法实现)

[4] 数字类型的判断 —— type(x); 例:type(4.5)↙ 得到 <class‘float‘>

[5] 数字类型的运算:

  运算符和运算函数  

操作含义

x+y

x与y之和

x-y

x与y之差

x*y

x与y之积

x/y

x与y之商

x//y

  不大于x和y之商的最大整数  

x%y

x与y之商的余数

+x

x

-x

x的负值

x**y

x的y次幂

abs(x)

x的绝对值

divmod(x,y)

(x//y,x%y)

pow(x,y)

x的y次幂


(2)字符串类型 —— 用双引号“”或单引号‘‘括起来的一个或多个字符

                           —— 可以保存在变量中,也可以单独存在

[1] 判断字符串类型:输入:type(str1)↙ 输出:<class‘str‘>

[2] 可以使用 \ 转义字符输出“”或‘‘之类的字符

    也可以用同样的方法 \\ 输出转义字符,\n 输出换行符等

    例:print(“\”大家好\””);

输出:”大家好”

[3] 字符串是一个字符序列,字符串最左端位置标示为0,向右递增

     字符串中字符位置的标示称为“索引”,例如:

 H 

 e 

 l 

 l 

 o 

   

 J 

 h  

 o 

 n 

0

1

2

3

4

5

6

7

8

9




可以使用单个索引访问字符串的特定位置。格式如下:

<string>[<索引>]

其中索引可以为常量和表达式

[4] python中字符串(设长度为L)索引从0开始,最后一个字符索引为L-1

    同时也允许使用负数,对字符串从右至左进行反向检索,最右索引值为-1

    可以通过两个索引值来确定一个范围,从而返回这个范围内的子字符串。格式如下:

<string>[<start>,<end>]

    其中start和end都为整型,索引范围为[start, end)

程序实例:

【题目描述】输入一个月份数字,返回对应月份名称的缩写

【分析】IPO模式:① 输入:输入一个表示月份的数字(1-12)

                  ② 处理:利用字符串基本操作实现功能

                    ③ 输出:输出数字对应月份名称缩写

【解答】

程序3:

# month.py
months="JanFebMarAprMayJunJulAugSepOctNovDec"
n=input("请输入月份数(1-12):")
pos=(int(n)-1) * 3
monthAbbrev=months[pos:pos+3]
print("月份简写是"+monthAbbrev+".")

输入:    输出:

7↙        月份简写是Jul.

(3)元组类型(Tuple) — 包含0个至多个元素的类型,元素之间用逗号分割

例:t1 = 123, 45.6, “hello”; t2 = (); t3 = 12;

元组外部可以使用或不使用括号

[1]元组类型的三个特点:  ① 元组中的元素可以是不同类型的,可以嵌套(用括号区分)

                                   ② 元组中的各个元素存在先后关系,可以通过索引来访问元组中的元素

                                        例:t1[0];

                                   ③ 元组定义后不能更改和删除—— 安全

[2] 与字符串类型类似,可以通过索引区间来访问元组中的部分元素

          也可以对元组进行+和*的运算 例:t2[1:];

(4)列表类型( List ) — 有序的元素集合

[1] 与元组类似,列表的每个元素类型可以不同,可以通过索引访问列表的单个元素

     例:a = [0,1,2] print(a) 输出:[0,1,2]

[2] 与元组不同,列表的大小没有限制,可以随时修改

(5)小结:

[1] 序列(字符串、元组、列表)类型的操作:

序列操作符

操作的含义

<seq> + <seq>

连接两个序列

<seq> + <整数类型>

对序列进行整数次重复

<seq>[<整数类型>]

索引序列中的元素

  <seq>[<整数类型>:<整数类型>]  

取序列的一个子序列

len(<seq>)

序列中元素个数

for <var> in <seq>

对序列进行循环列举

<expr> in <seq>

  成员检查,判断<expr>是否在序列中  



[2] 方法,格式如下:

<type>.func()

① 字符串方法:

字符串方法

含义

<string>.upper()

字符串中字母大写

<string>.lower()

字符串中字母小写

<string>.strip()

去掉两边空格和指定字符

<string>.split()

  按指定字符分割字符串为数组  

<string>.join()

连接两个字符串序列

<string>.find()

搜索指定字符串

  <string>.replace()  

字符串替换


② 列表方法:

列表方法

含义

  <list>.append(x)  

将元素x增加到列表最后

<list>.sort()

将列表元素排序

<list>.reverse()

将列表元素反转

<list>.index(x)

  返回第一次出现元素x的索引值  

<list>.insert(i,x)

在位置i处插入新元素x

<list>.count(x)

返回元素x在列表中的数量

<list>.remove(x)

删除列表中第一次出现的元素x

<list>.pop(i)

取出列表中位置i的元素并删除


2.2 math库和random库的使用及实例:

(1)math库:

函数

  数学表示  

含义

圆周率pi

π

  π的近似值,15位小数  

自然常数e

e

e的近似值,15位小数

ceil(x)

⌈x⌉

对浮点数向上取整

floor(x)

⌊x⌋

对浮点数向下取整

pow(x,y)

x^y

x的y次幂

log(x)

lnx

以e为底的对数

log10(x)

log10x

以10为底的对数

sqrt(x)

√x

平方根

exp(x)

e^x

e的x次幂

  degrees(x)  

 

弧度转角度

radians(x)

 

角度转弧度

sin(x)

sinx

x的正弦值

cos(x)

cosx

x的余弦值

tan(x)

tanx

x的正切值

asin(x)

arcsinx

x的反正弦值

acos(x)

arccosx

x的反余弦值

atan(x)

arctanx

x的反正切值

x∈[-1.0, 1.0]

(2)random库:

函数

含义

seed(x)

  给随机数一个种子值,默认随机种子是系统时钟  

random()

生成一个[0, 1.0]之间的随机小数

uniform(a,b)

生成一个a到b之间的随机小数

randint(a,b)

生成一个a到b之间的随机整数

  randrange(a,b,c)  

随机生成一个从a开始到b以c递增的数

choice(<list>)

从列表中随机返回一个元素

shuffle(<list>)

将列表中元素随机打乱

sample(<list>,k)

从指定列表随机获取k个元素

【注意】seed()函数用来设置随机种子,随机种子相同,随机序列相同— 伪随机数

【实例】π的计算 — 蒙特卡洛方法(随机抽样/统计实验方法)

① 先构造单位正方形和1/4圆

② 向正方形内抛洒大量点

③ 统计落入圆内的点占所有点的比例

【分析】IPO:① 输入:抛点的数量

                     ② 处理:对于每个抛洒点,计算点到圆心的距离

                                     通过判断该点在圆内或圆外。统计圆内点的数量

                     ③ 输出:π值

程序4:

# pi.py
from randomimport random
from math importsqrt
from time importclock
DARTS = 1200
hits = 0
clock()
for i inrange(1,DARTS): # 抛洒DARTS次
x, y = random(), random() <span style="white-space:pre"></span># 给出随机坐标(x,y)
dist = sqrt(x**2 + y**2) <span style="white-space:pre"></span># 计算抛点到原点的距离
if dist <= 1.0: # 判断距离是否在圆内,若是则hits自增1
hits = hits + 1
pi = 4 *(hits/DARTS) # 计算比值,得到π值
print("Pi的值是 %s" % pi)
print("程序运行时间是 %-5.5ss" % clock())

输出:Pi的值是 3.14

程序运行时间是 0.015s