第三周:Python编程之数据类型
3.1 数字和字符串类型
1.类型的概念
程序设计不允许出现语法歧义;
所以需要明确类型;
常用6中数据类型:
1)数字类型;
2)字符串类型;
3)元组类型;
4)列表类型;
5)文件类型;
6)字典类型;
2.数字类型:
程序元素,010/10存在多种可能;
数字类型对Python语言中的数字的表示和使用进行了定义和规范;
1)整数;
与数学中的整数概念一致,没有取值范围的限制;
如pow(x,y)函数:计算x的y次幂;
(Code3_1)
print(pow(2,15))
log:
32768
猜猜看,如何获得数字长度?
十进制数:10、-21;
十六进制:0x或0X开头的,-0x89;
八进制:0o或0O开头的;
二进制:0b或0B开头的;
2)浮点数;
带有小数点及小数的数字;
Python语言中的浮点数的数值范围存在限制,小数点进度也存在限制,这种限制与不同计算机系统有关;
获取系统浮点数信息;
(Code3_2)
import sys
print(sys.float_info)
log:
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
可以看到,最大值是10的308次方;最小值10的-307次方;精度到小数点后53位;
a:0.0和0不同;
b:96e4,4.3e-3,9.6E5(科学计数法)
科学计数法使用字母e或E作为幂的符号,以10为基数;
<a>e<b> = a*(10^b)
3)复数类型;
与数学中的复数概念一致,z = a + bj,a为实数部分,b为虚数部分,a和b都是浮点类型,虚数部分用j或者J标识;(j*j = -1)
对于复数z,可用z.real获得实数部分,z.imag获得虚数部分;
3.数字类型的关系
三种类型存在一种逐渐“扩展”的关系:
整数->浮点数->复数(整数是浮点数特例,浮点数是复数特例);
不同数据类型的混合运算,运算后生成结果为最宽类型;
三种类型可以互相转换;
函数:int() float() complex();
int(4.5) = 4 #去掉小数部分
float(4) = 4.0 #增加小数部分
complex(4) = 4 + 0j #增加值为零的虚数部分
不支持复数的反方向转换,即不能把虚数使用这种函数的方式转换为整数或浮点数;
数字类型的判断:
使用函数type(x)返回x的类型,适合于所有类型的判断;
print(type(4.5))
log:
<class 'float’>
数字类型的运算:
python还提供了math库,进行更多的数学运算;后续会介绍;
4.字符串数据类型
双引号或单引号括起来的一个或多个字符;
type(“aaa”) <class ’str’>
Python语言转义符:\;
输出带有引号的字符串,可以使用转义符;如print(“\”大家好!\”")
使用\\可以输出带有转义符的字符串;
字符串是一个字符序列:字符串最左端位置标记为0,依次增加;
字符串中的编号叫做索引;
可以使用单个索引访问字符串中的特定位置;格式如<string>[<索引>]
Python中字符串的索引从0开始,一个长度为L的字符串最后一个字符的位置是L-1;
Python同时允许使用负数从字符串的右边末尾向左进行反向索引,最右端索引值为-1;
此外,也可以通过两个索引值确定一个位置范围内,返回这个范围的字符串子串;
格式如:<stirng>[<start>:<end>]
这里:start和end都是整数型数值,这个子序列从索引start开始直到索引end结束,但不包括end的位置;
字符串之间可以通过+或*进行链接:
1)加法操作+将两个字符串连接成一个字符串;
2)乘法操作*构建一个由其本身字符串重复链接而成的字符串;
len()函数可以返回一个字符串的长度;
大多数数据类型都可以通过str()函数转换为字符串;
(Code3_3)
greet = "Hello world!"print(greet[2])
x = 8print(greet[x - 2])
print(greet[-1])
print(greet[0:3])
print("Hello" + "flower")
print("huahau"*3)
print(len("haahha"))
print(str(123))
实现一段代码示例:输入月份数字,返回月份字符串;
(Code3_4)
months = “JanFebMarAprMayJunJulAugSepOctNovDec"
list = [1,2,3,4,5,6,7,8,9,10,11,12]
def monthConvertToString(month):
if month in list:
monthString = months[((month-1)*3):(month*3)]
return monthString
return "---"
def main():
n = input("请输入月份数(1-12):")
print(monthConvertToString(int(n)))
main()
5.字符串的操作方法
格式<string>.func()
此外,还可以遍历字符串中的每个字符;
for <var> in <string>:
相关操作方法还有很多;
转义字符可以在字符串中表达一些不可直接打印的信息,如用\n表示换行;
3.2 元组和列表类型
1.元组是包含多个元素的类型,元素之间用逗号分割;
Tuple(元组)
如:t1 = 123,456,”hello”
元组可以是空的,t2 = ()
元组包含一个元素,t3 = 123,
元组外侧可以使用括号,也可以不使用;
元组的三个特点:
1)元组中元素可以是不同类型,也可以是元组,此时作为元素的元组需要加()括号以区分;
2)元组元素之间存在先后关系,可以通过索引访问;
3)元组定义后不能更改,也不能删除;
与字符串类似,可以通过索引区间来访问元组中部分元素,如t[1:]
与字符串类似,元组之间可以使用+和*进行运算;
元组定义后不能修改是为了更加安全,如果想要更改以增加代码的灵活性,可以使用列表;
2.列表类型及其操作
list列表是有序的元素集合;可以使用索引访问;
列表中每个元素类型可以不一样;
与元组不同的是,列表的大小没有限制,可以随时修改;
列表的操作
(Code3_5)
vlist = [1,2,3,4,5]
print(vlist * 2)
print(len(vlist[3:]))#从索引3开始到末尾
for val in vlist[:2]:#到索引2且不包含
print(val)
if 2 in vlist:
print("true”)
log:
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
2
1
2
true
列表其他操作:
(Code3_6)
vlist = [0,1,2,3,4]
vlist.append('Python')
print(vlist)
vlist.reverse()
print(vlist)
print(vlist.index(3))
print(vlist.pop(3))
print(vlist)
log:
[0, 1, 2, 3, 4, 'Python']
['Python', 4, 3, 2, 1, 0]
2
2
['Python', 4, 3, 1, 0]
字符串可以通过split()函数,将字符串拆分成一个列表;如:”hahaha”.split(“a”) log:['h', 'h', 'h', '']
3.3 math库、random库和实例
math库包含一批数学函数:
random库包含一批随机函数,生成随机数:
(Code3_7)
from random import *
print(random())
print(uniform(1,10))
print(randint(1,10))
print(randrange(1,10,2))
ra = [0,1,2,3,4,5,6,7,8,9]
print(choice(ra))
shuffle(ra)
print(ra)
print(sample(ra,3))
seed(10)
print(uniform(1,10))
print(uniform(1,10))
seed(10)
print(uniform(1,10))
print(uniform(1,10))#设定相同随机种子 调用随机数函数生成的值是相同的
log:
0.8079332114449371
2.9530059453859883
2
3
5
[2, 1, 5, 4, 0, 3, 8, 7, 9, 6]
[4, 5, 0]
6.142623352209221
4.860001492076032
6.142623352209221
4.860001492076032
设定相同随机种子 调用随机数函数生成的值是相同的
这是因为:
计算机是一个确定设备,他不能生成真正意义上的随机数,由计算机产生的都是伪随机数;
都是从一个种子开始的伪随机序列;
从相同的随机种子开始会产生相同的伪随机序列;
使用python语言计算π:
π是一个无理数,只能用近似法计算——蒙特卡洛方法(Monte Carlo)
1)单位正方形;
2)随机圆;
3)随机抛洒点;
4)圆内点/正方形面积即为π/4;
处理:
对于每个抛洒点,计算点到圆心的距离,通过距离判断是在园内还是圆外;统计数量;
(Code3_8)
引入数学库的同时引入time库用于计时;
from random import random
from math import sqrt
from time import clock
DARTS = 1200
hits = 0
clock()
for i in range(1,DARTS):
x, y = random(), random()
dist = sqrt(x**2 + y**2)
if dist <= 1.0:
hits = hits + 1
pi = 4* (hits/DARTS)
print("π = %s"%pi) #%格式输出是就得方式
print("π={}\nTime={}".format(pi,clock())) #format格式输出函数是新的方式
log:
π = 3.1066666666666665
π=3.1066666666666665
Time=0.054041
3.4 课后练习
字符串操作测验(略)