第3章 基本数据类型

来自CloudWiki
跳转至: 导航搜索

数字类型

Python提供3种数据类型:整数类型,浮点数类型和复数类型。

整数类型

整数类型与数学上的概念一致

>>> a=1
>>> b=2
>>> a+b
3
>>> pow(2,8)
256
>>> pow(10,4)
10000

浮点数类型

浮点数:表示带有小数的数值

python浮点数计算 存在一个“不确定尾数”问题:

>>> 0.1+0.2
0.30000000000000004
>>> 0.1+0.2 == 0.3
False

解决办法:

>>> round(1.2346,2)
1.23
>>> round(0.1+0.2,3) ==0.3
True

复数类型

复数类型表示数学上的复数。

>>> (1.23e4+5.67e4j).real
12300.0
>>> (1.23e4+5.67e4j).imag
56700.0

数字类型的运算

数值运算操作符

  • python提供了九个基本的数值运算操作符,这些操作符由python解释器直接提供,也叫做内置操作符。
x+y
x-y
x*y
x/y
x//y
x%y
-x
+x
x**y
  • 示例操作:
>>> x,y=2,3
>>> x+y
5
>>> x-y
-1
>>> x*y
6
>>> x/y
0.6666666666666666
>>> x,y=9,2
>>> x/y
4.5
>>> x//y
4
>>> x%y
1
>>> -x
-9
>>> +x
9
>>> x**y
81

数值运算函数

  • abs(x): 求绝对值
>>> x,y = 9,2
>>> abs(x)
9
>>> abs(-x)
9
  • divmod(x,y):获得除法的商和余数
>>> x,y = 9,2
 >>> divmod(x,y)
(4, 1)
  • pow(x,y)
>>> x,y = 9,2
>> pow(x,y)
  • round(x)

"4舍6入5看齐,奇进偶不进" 关于round,接力分析,结论如下: 当个位为奇数,小数部分>=0.5入,其余为舍 当个位为偶数,小数部分>0.5入,其余为舍。

>>> x = 4.5
>>round(x)
  • max(x1,x2,x3,...,xn)
>>> x, y, z = 1, 2, 3
>>> max(x,y,z)
  • min(x1,x2,x3,...,xn)
>>> x, y, z = 1, 2, 3
>>> min(x,y,z)

字符串类型及其格式化

字符串类型的表示

  • 字符串是字符的序列,表示有一对单引号,双引号或三引号构成。
>>> name = 'abc'
>>> print(name)
 abc
  • 其中单引号和双引号表示单行字符串,三引号表示多行字符串。
  • 打印字符串的python程序,运行结果如下,注意其中的引号部分。
>>> print('这是“泉城”济南')
这是“泉城”济南
>>> print("这是'泉城'济南")
这是'泉城'济南
>>> print('''这是'泉城'济南,
一座美丽的城市。''')
这是'泉城'济南,
一座美丽的城市。
  • input( )函数将用户输入的内容当作一个字符串类型,这是获得用户输入的常用方式。
  • print( )函数可以直接打印字符串,这是输出字符串的常用方式。如:
>>> name = input("请输入名字: ")
请输入名字: Python语言
>>> print(name)
Python语言
>>>
  • 反斜杠字符是一个特殊字符,在字符串中表示转义,即该字符与后面相邻的一个字符共同组成了新的含义。
>>> print("Python\n语言\t程序\t设计")
Python
语言	程序	设计

字符串的索引

  • 字符串包括两种序号体系,正向递增序号和反向递减序号。
  • P1-105.jpg
  • 如果字符串长度为L,正向递增,序号以最左侧字符序号为零,向右依次递增,最右侧字符序号为L-1。反向递减虚号,以最右侧字符序号为-1,向左依次递减,最左侧字符序号为-L.
  • Python字符串也提供区间访问方式,采用[N:M]格式,表示字符串中从n到m不包含m的子字符串。如果表示中M或者N索引缺失,则表示字符串把开始或结束索引值设为默认值。
>>> name = "Python语言程序设计"
>>> print(name[0])
P
>>> print(name[0],name[7],name[-1])
P 言 计
>>> print(name[2:-2])
thon语言程序
>>> print(name[:6])
Python
>>> print(name[6:])
语言程序设计
>>> print(name[:])
Python语言程序设计


format()方法的基本使用

Python推荐使用.format()格式化方法,其使用方式如下:

<模板字符串>.format(<逗号分隔的参数>)
>>> print("{}曰:学而时习之,不亦说乎。".format("孔子"))
孔子曰:学而时习之,不亦说乎。
>>> print("{}曰:学而时习之,不亦{}。".format("孔子","说乎"))
孔子曰:学而时习之,不亦说乎。
>>> print("{:.2f}".format(3.1415926))#输出小数点后2位
3.14
>>> print("{:.5}".format("这是一个很长的字符串"))#输出字符串的前5位
这是一个很

字符串类型的操作

字符串操作符

  • python提供了五个字符串的基本操作符,如:

x+y

  • Python字符串支持加法运算符,表示两个字符串连接,生成新字符串。
>>> 'hello ' + 'world'
'hello world'

x in s

  • 成员判断,关键字in
>>> "a" in "abcde"     #测试一个字符中是否存在于另一个字符串中
True
>>> 'ab' in 'abcde'
True
>>> 'ac' in 'abcde'    #关键字in左边的字符串作为一个整体对待
False
>>> "j" in "abcde"
False
  • 例子:
NameList ="张明 王乐 刘全全 谭虎"
name = "王乐"
if "王乐" in NameList:
    print(name+"没在名单之中")
else:
    print(name+"在名单之中")

x * n 或 n * x

  • Python字符串支持与整数的乘法运算,表示序列重复,也就是字符串内容的重复,得到新字符串。
>>> 'abcd' * 3
'abcdabcdabcd'

str[i]

  • str[i],索引,表示第i个字符
>>> name = input("请输入名称:")	
请输入姓名:山东商业职业技术学院
>>> name[0]	
'山'

str[N:M]

  • str[N:M]切片,返回索引第N到M的子串,其中不包含M
  • 例:截取身份证号第X位数字
>>> name = input("请输入名称:")	
请输入姓名:山东商业职业技术学院
>>> name[2:4]	
'商业'
>>> name[4:6]
'职业'

字符串处理函数

  • python解释器提供了一些内置函数,处理字符串呢,非常方便。
>>> x = 'Hello world.'
>>> len(x)                       #字符串长度
12
>>> max(x)                       #最大字符
'w'
>>> min(x)
' '
>>> x=7	
>>> bin(x)	#返回整数x对应的二进制字符串型。
'0b111'
>>> x= 11
>>> hex(x)#返回整数x对应的16进制字符串型。
'0xb'
>>> oct(x)#返回整数x对应的八进制字符串形式。
'0o13'
>>> x=3.1415
>>> str(x)  #返回x的字符串形式。
'3.1415'
>>> ord('a')#返回某个字符所表示的Unicode编码。
97
>>> chr(97) 返回Unicode编码对应的单字符 
  • 例题:打印英文26个字母的Unicode编码
str1='abcdefghijklmnopqrstuvwxyz'
for i in range(0,26):
    print(ord(str1[i]))#打印26个字母对应的Unicode编码

字符串处理方法

大小写转换:

>>> s = "Hello World"
>>> s.lower()
'hello world'
>>> s.upper()
'HELLO WORLD'

字符串分割:

>>> p = "Python is an excellent language"
>>> p.split()
['Python', 'is', 'an', 'excellent', 'language']
>>> p.split('a')
['Python is ', 'n excellent l', 'ngu', 'ge']
>>> p.split('an')
['Python is ', ' excellent l', 'guage']

统计某个字符出现的次数:

>>> p.count('a')
3
>>> p.count('an')
2
>>> p.count('')
32
>>> p.count(' ')
4
>>> p.replace('a','#')
'Python is #n excellent l#ngu#ge'
>>> p
'Python is an excellent language'
>>> p.replace('Python','C')
'C is an excellent language'
>>> 

类型判断和类型间转换

类型判断:

>>> a=10.10
>>> type(a)
<class 'float'>#类型为浮点型
>>> b=1010
>>> type(b)
<class 'int'>#类型为整形
>>> c="1010"
>>> type(c)
<class 'str'>#类型为字符串

类型转换:

  • int(x):转化为整型
  • float(x):转化为浮点型
  • complet(re[,im]):转化为复数
  • str(x):转换为字符串
  • 示例:
>>> int(10.99)
10
>>> t = 10.99
>>> complex(t)
(10.99+0j)
>>> float(3)
3.0
>>> d=100.05
>>> str(d)
'100.05'

实例解析:凯撒编码

  • 例题:凯撒编码
  • “恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。

初始源码:能处理26个字母除xyz以外的字符的加密

 plaincode = input("请输入明文: ")
  for p in plaincode:
    if ord("a") <= ord(p) <= ord("z"):
        print(chr(ord("a") + (ord(p) - ord("a") + 3)),end='')  #(ord(p) - ord("a") + 3)代表说a后面第几个字符
    else:
        print(p, end='')

改进源码:能处理所有26个字符的加密

plaincode = input("请输入明文: ")
 for p in plaincode:
    if ord("a") <= ord(p) <= ord("z"):
        print(chr(ord("a") + (ord(p) - ord("a") + 3)%26),end='')
    else:
        print(p, end='')