第三章 基本数据类型

第三章 基本数据类型

3.1 数字类型

3.1.1 数字类型

Python语言包括三种数字类型

  • 整数类型

  • 浮点数类型

  • 复数类型

3.1.2 整数类型 int

  • Python支持任意大的数字,具体可以大到什么程度仅受内存大小的限制
  • 十进制整数:0、-1、9、123
  • 十六进制整数,必须以0x、OX开头:0x10、0xfa、0xabcdef
  • 八进制整数,必须以0o、0O开头:0o35、0o11
  • 二进制整数,必须以0b、0B开头:0b101、0b100

浮点数类型 float

  • 浮点数就是包含小数点的数
  • Python语言中浮点数的数值范围存在限制,小数精度也存在限制。这种限制与在不同计算机系统有关。
  • 浮点数示例:15.0、0.37、-11.2、2.3e2

3.1.4 复数类型 complex

  • Python中的复数由两部分组成:实部和虚部

    复数的形式为:实部+虚部j

  • 复数示例:2+3j、-0.5-0.9j

    >>> a=2+3j
    >>> a.real # 查看复数实部
    2.0
    >>> a.imag # 查看复数虚部
    3.0
    >>> a.conjugate() # 共轭复数
    (2-3j)
    

补充 其他数据类型

布尔类型 bool
  • 布尔类型是用来表示
3>2
True
2>3
False

字符串类型str

  • 字符串类型使用单引号、双引号、三单引号、三双引号作为定界符来表示字符串,并且不同的定界符之间可以互相嵌套
  • 字符串实例:
    • 'abc'、'123'、"Python"、'中国'
    • 空串表示为’'或""

三引号’’'或"""表示的字符串可以换行,支持排版较为复杂的字符串;三引号还可以在程序中表示较长的注释。

[例]

print(
    """ 
      静夜思
    床前明月光,
    疑是地上霜。
    举头望明月,
    低头思故乡。  
    """
)

程序结果:

      静夜思
    床前明月光,
    疑是地上霜。
    举头望明月,
    低头思故乡。 
列表 list
  • Python中列表和字符串一样,也是一种序列类型,列表是一种数据集合
  • 列表用[ ]来表示,列表内容以逗号进行分隔
  • 列表示例:[1,2,3,4]、[3,4,5,"abc"]、["one","two","three","four"]
元组 tuple
  • 元组用()来表示,元组内容以逗号进行分隔。
  • 元组的内容不能修改
  • 示例:(1,2,3,4)、(3,4.5,"abc")

字典 dict

  • 字典是Python中唯一内建的映射类型,可用来实现通过数据查找关联数据的功能。
  • 字典是键值对的无序集合。字典中的每一个元素都包含两部分:键和值
  • 字典格式:{键:值, 键:值, ...}
  • 字典示例:{'CN':'China', 'AU':'Australia','DE':'Germany'}

集合set

  • 集合是一组对象的集合,对象可以是各种类型

  • 集合又各种类型元素组成,但元素之间没有任何顺序,并且元素都不重复。

  • 集合用大括号{}来表示

  • 集合示例:{'train','car','ship','bus'}

3.2 数字类型的操作

要点:Python解释器为数字类型提供数值运算操作符、数值运算函数、类型转换函数等操作方法

3.2.1 内置的数值运算操作符

操作符描述
x+yx与y之和
x-yx与y之差
x*yx与y之积
x/yx与y之商
x//yx与y之整数商,向下取整
x%yx与y之商的余数
-xx的负值,即:x*(-1)
+xx本身
x**yx的y次幂 x y x^y xy,等价于pow(3,2)
  • +运算符还可以用于列表、元组、字符串的连接,但不支持不同类型的对象之间相加或连接。

    >>> [1,2,3]+[4,5,6]   # 连接两个列表
    [1, 2, 3, 4, 5, 6]
    >>> (1,2,3)+(4,)     # 连接两个元组
    (1, 2, 3, 4)
    >>> 'ab'+'12'        # 连接两个字符串
    'ab12'
    
  • *运算符还可以用于列表、元组、字符串类型与整数的乘法,表示序列元素的重复,生成新的序列对象。

    >>> [1,2,3]*3
    [1, 2, 3, 1, 2, 3, 1, 2, 3]
    >>> (1,2,3)*3
    (1, 2, 3, 1, 2, 3, 1, 2, 3)
    >>> 'abc'*3
    'abcabcabc'
    
    
  • Python还有赋值运算符+=、-=、*=、/=、//=、**=、%=等大量复合赋值运算符。

    例如:x+=3等价于x=x+3

练习题:

1.语句a=(3/4)+3%2;运行后,a的值为( )。a=0.75+1=1.75

2.若x=3.5;z=8x+z%3/4的值为( ). 3.5+(8%3)/4=3.5+8%3/4=3.5+2/4=3.5+0.5=4.0

3.设f=g=2.0,使f为4.0的表达式是( ). D

A. f/=g*10 # f=f/(g*10)=2/20=0.1

B. f-=g+2 # f=f-g-2=-2

C. f*=g-6 # f=f*(g-6)=2 *(2-6)=-8

D. f+=g # f= f+g=4

  1. x=1,x*=3+5**2的值为( ) x*=x*(3+25)=1*28=28

思考与练习

请将下面数学表达式用Python写出来,并运算结果。

1. x = ( 2 4 + 7 − 3 × 4 ) 5 x=\frac{(2^4+7-3\times4)}{5} x=5(24+73×4)

2. x = ( 1 + 3 2 ) × ( 16 m o d 7 ) / 7 x=(1+3^2)\times(16 mod 7)/7 x=(1+32)×(16mod7)/7

>>> x=(2**4+7-3*4)/5
>>> x
2.2

>>> x=(1+3**2)*(16%7)/7
>>> x
2.857142857142857

关系运算操作符 补充

关系运算符根据表达式的值得真假返回布尔值:

<(小于)、> (大于)、<= (小于等于)、 >=(大于等于)、 ==(等于)、!= (等于)、!=(不等于)

Python关系运算符最大的特点是可以连用。如5>2<7

>>> a = 3
>>> a == 2
False
>>> 1<a<5    # 等价于1<a 且 a<5
True
>>> 5<a>1
False

思考

1.让用户输入一个值赋值给x,判断x是否为’男‘

2.让用户输入一个值赋值给x,判断x是否在[0,100]间

>>> x=input("")
>? 男
>>> x == "男"
True
>>> x=int(input())
>? 45
>>> 0<=x<=100
True

逻辑运算符 补充

逻辑运算符将表达式连接在一起,一般会返回布尔值

and(与):两边都是真,结果为真
or(或):只要一个为真,结果为真
not(非):取反

>>> x = False
>>> y = True
>>> x or y
True
>>> not (x or y)
False
>>> not x or y
True
>>> i = 7
>>> j = 8
>>> i>=j and i<j
False
>>> a=5; b=2; c=1
>>> a-b>2 or b ==c
True

习题

1.若希望当a的值为奇数时,表达式的值为“真”,a的值为偶数时,表达式的值为“假”。则不能满足要求的表达式是( ) C

A. a%2 ==1

B. not a%2 == 0

C. not a%2 # not 8%2 = True not 9%2 =False

D. a%2

2.判断t是否为闰年。闰年的条件:年份t能被400整除,或者能被4整除但不能被100整除。

t = eval(input("请输入年份:"))
if t%400==0 or t%4==0 and t%100!=0:
    print(str(t)+"年是闰年")
else:
    print(str(t)+"年不是闰年")

and和or具有惰性求值或逻辑短路的特点,当连接多个表达式时只计算必须要计算的值

>>> 3<5 or a>3  # a没有定义
True
>>> 3>5 or a>3 # a没有定义
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'a' is not defined

3.2.4 位运算符

位运算符只能用于整数,其内部执行过程为:首先将整数转换为二进制数,然后右对齐,必要的时候左侧补0,按位进行运算,最后再把计算结果转换为十进制数字返回。

运算符说明
&1&1=1、1&0=0&1=0&0=0
````
^1 ^ 1= 0^0=0、1 ^ 0=0^1=1
<<每左移一位相当于乘以2
>>每右移一位相当于整除以2
>>> bin(3)   # 3的二进制
'0b11'
>>> 3 << 2   # 把3左移2位
12
>>> bin(12)   
'0b1100'
>>> bin(7)   # 7的二进制
'0b111'
>>> 3 & 7    # 011&111=011
3
>>> bin(8)
'0b1000'
>>> 3|8  # 位或运算
11
>>> bin(11)     # 11 | 1000= 1011
'0b1011'
>>> bin(5)   # 5的二进制
'0b101'
>>> 3^5
6
>>> bin(6)   # 11^101=110
'0b110'

3.2.2 内置的数值运算函数

Python解释器提供了一些内置函数,在这些内置函数之中,有6个函数与数值运算相关

函数描述
abs(x)x的绝对值
divmod(x,y)(x//y,x%y)求商和余数,输出为二元组形式(也称为元组类型)
pow(x,y[,z])(x**y)%z 求幂,[…]表示该参数可以省略,即pow(x,y),它与x**y相同
round(x[,ndigits])对x四舍五入,保留ndigits位小数。round(x)返回四舍五入的整数值
max(x1,x2,…,xn)求最大值,n没有限定
min(x1,x2,…,xn)求最小值,n没有限定
>>> x=-100
>>> y=abs(x)
>>> y
100
>>> x=10
>>> y=3
>>> z=divmod(x,y)
>>> z
(3, 1)
>>> x=10
>>> y=2
>>> z=3
>>> m=pow(x,y,z)
>>> m
1
>>> x = 3.14159
>>> round(x,2)
3.14
>>> a = [3,0,5]
>>> max(a)
5
>>> min(a)
0
>>> sum(a)
8

3.2.3 内置的数字类型转换函数

函数描述
int(x)将x转换为整数,x可以是浮点数或字符串
float(x)将x转换为浮点数,x是整数或字符串
complex(re[,im])生成一个复数,实部为re,虚部为im,re可以是整数、浮点数或字串符,im可以是整数或浮点数但不能为字符串
>>> int("123")
123
>>> int(0b10)
2
>>> int(0o10)
8
>>> int(0x10)
16
>>> int(-2.34)
-2
>>> float(3)     # 把整数转换为实数
3.0
>>> float('3.5')  # 把数字字符串转换为实数
3.5
>>> complex(3)    # 指定实部
(3+0j)
>>> complex(3,5)  # 指定实部和虚部
(3+5j)
map()

==map()==是接收一个函数f依次映射到序列或迭代对象上的每个元素,并返回一个map对象。格式:

map(函数f,list数据)

>>> x,y=map(int,["45","56"])
>>> x,y
(45, 56)
>>> a,b=map(round,[3.4546,4.6757],(3,2))
>>> a,b
(3.455, 4.68)
>>> round(3.4546,3)
3.455
>>> round(4.6757,2)
4.68

思考

Exer1:用户输入一个三位自然数,计算并输出其百位、十位和个位上的数字。

x = int(input("请输入一个三位自然数:"))
a = x//100
b = (x-a*100)//10
c = x-a*100-b*10
print("百位数字为:"+str(a),"十位数字为:"+str(b),"个位数字为:"+str(c))

程序结果:

请输入一个三位自然数:324
百位数字为:3 十位数字为:2 个位数字为:4
x=int(input())
a=x//100
b=x//10%10
c=x%10
print(a,b,c)
i=input("请输入一个三位自然数:")
print("百位数字为"+i[0])
print("十位数字为"+i[1])
print("个位数字为"+i[2])
x=int(input('请输入一个三位数:'))
a,b=divmod(x,100)
b,c=divmod(b,10)
print(a,b,c)
x=input("请输入一个三位数:")
a,b,c=map(int,x)
print(a,b,c)

3.3 模块1:math库的使用

3.3.1 math库概述

  • math库是Python提供的内置数学类函数库
  • math库不支持复数类型
  • math库一共提供了4个数学常数和44个函数。
  • 44个函数共分为4类:
    • 16个数值表示函数
    • 8个幂对数函数
    • 16个三角对数函数
    • 4个高等特殊函数

3.3.2 math库解析

math库包括4个数学常数

常数数学表示描述
math.pi π \pi π圆周率,3.141592653589793
math.e e e e自然对数,2.718281828459045
math.inf ∞ \infty 正无穷大,负无穷大为-math.inf
math.nan非浮点数标记,NaN(Not a Number)

3.4 实例3:天天向上的力量

例:天天向上

一年365天,以第1天的能力值为基数,记为1.0,当好好学习时能力值相比前一天提高1%,当没有学习时能力值相比前一天下降1%。每天努力和每天放任,一年下来的能力值相差多少呢?

根据题目,天天向上的力量是 ( 1 + 0.001 ) 365 (1+0.001)^{365} (1+0.001)365,放任或向下的力量是 ( 1 − 0.001 ) 365 (1-0.001)^{365} (10.001)365

import math
dayup = math.pow((1.0+0.001), 365)    # 提高0.001
daydown = math.pow((1.0-0.001), 365)  # 放任0.001
print("向上:{:.2f},向下:{:.2f}.".format(dayup,daydown))

程序结果:

向上:1.44,向下:0.69.

思考:

已知三角形的两边长及其夹角,求第三边长

公式: c = a 2 + b 2 − 2 a b cos ⁡ θ c=\sqrt{a^2+b^2-2ab\cos\theta} c=a2+b22abcosθ

import math
a=int(input("请输入一条边的长度:"))
b=int(input("请再输入另一条边的长度:"))
x=int(input("请输入上述两条边的夹角度数(角度值):"))
x=math.radians(x)
j=math.cos(x)

c=(a**2+b**2-2*a*b*j)**0.5
print(c)

结果:

请输入一条边的长度:3
请再输入另一条边的长度:4
请输入上述两条边的夹角度数(角度值)90
5.0

3.5 字符串类型及其操作

  • 字符串是用双引号“”或者单引号''括起来的一个或多个字符
  • 字符串对象是不可变的。字符串对象提供的涉及到字符串”修改“的方法都是返回修改后的新字符串,并不对原始字符串做任何修改。

3.5.1 字符串类型的表示

字符串是一个字符序列:字符串最左端位置标记为0,依次增加。字符串中的编号叫做”索引“。

012345678910
  • 单个索引辅助访问字符串中的特定位置

格式为:<string>[<索引>]

  • 切片,通过两个索引值返回一个子串。

格式为:<string>[<start>:<end>:step]

  • 这个子序列从索引start开始直到索引end结束,但不包括end位置。step代表步长。
>>> a='国无德不兴 人无德不立'
>>> a[2]
'德'
>>> x=8
>>> a[x-2]
'人'
>>> a[-7]
'兴'
>>> a[-11:-7]        
'国无德不'
>>> a[1:-1]
'无德不兴 人无德不'
>>> a[2:-2:2]
'德兴人德'

反斜杠字符(\)是一个特殊字符,在字符串中表示转义,即该字符与后面相邻的一个字符共同组成了新的含义。

\n:表示换行

\\:表示反斜杠

\':表示单引号

\"表示双引号

\b:退格,把光标移动到前一列位置

\f:换页符

\n:换行符

\r:回车

\v:垂直制表符

\ooo:3位八进制数对应的字符

\xhh:2位十六进制数对应的字符

\uhhhh:4位十六进制数表示的Unicode字符

\t:表示制表符(Tab)等。

>>> print("Python\n语言\t程序\t设计")
Python
语言	程序	设计
>>> print("c:\\now")
c:\now
>>> a= 'Let\'s go'
>>> print(a)
Let's go

3.5.3 基本的字符串操作符

字符串之间可以通过+或*进行连接

  • 加法操作(+)将两个字符串连接成为一个新的字符串

  • 乘法操作(*)生成一个由其本身字符串重复连接而成的字符串

    >>> "pine"+"apple"
    'pineapple'
    >>> 3*'pine'
    'pinepinepine'
    
操作符描述
x in s如果x是s的元素,返回True,否则返回False
x not in s如果x不是s的元素,返回True,否则返回False
>>> c='cat,dog'
>>> "d" in c
True
>>> "z" in c
False
>>> "z" not in c
True

思考1:A=“5”+“8” A的值是多少? ’ 58’

思考2:name=”志存高远、脚踏实地“;name[5:]、name[0:-1]、name[:5]、name[0:-5]的值分别是多少?

>>> name="志存高远、脚踏实地"
>>> name[5:]
'脚踏实地'
>>> name[0:-1]
'志存高远、脚踏实'
>>> name[:5]
'志存高远、'
>>> name[0:-5]
'志存高远'

[例]获取星期字符串

程序读入一个表示星期几的数字(1~7),输出对应的星期字符串名称。例如,输入3,返回“星期三”。代码如下:

weekstr = "星期一星期二星期三星期四星期五星期六星期日"
weekid=eval(input("请输入星期数字(1-7):"))
pos = (weekid-1)*3
print(weekstr[pos:pos+3])

程序结果:

请输入星期数字(1-7):3
星期三

3.5.3 内置的字符串处理函数

操作含义
len(x)返回字符串x的长度,也可返回其他组合数据类型元素个数
str(x)返回任意类型x所对应的字符串形式
chr(x)Unicode码对应的单个字符
ord(x)返回单字符表示的Unicode编码
hex(x)返回整数x对应十六进制数的小写形式字符串
oct(x)返回整数x对应八进制的小写形式字符串
bin(x)整数转换为二进制形式字符串
>>> len("pine")
4
>>> len("祖国,你好!")
6
>>> bin(16)
'0b10000'
>>> oct(16)
'0o20'
>>> hex(16)
'0x10'
>>> ord('A')
65
>>> chr(65)
'A'
>>> chr(ord('A')+1)
'B'

3.5.4 内置的字符串处理方法

操作含义
str.upper()字符串中字母大写
str.lower()字符串中字母小写
str.islower()判断字符串是否都是小写,是时,返回True,否则False
str.isnumeric()判断字符串是否都是数字,是时,返回True,否则False
str.isdigit()同str.isnumeric()
str.isupper()判断字符串是否都是大写,是时,返回True,否则False
str.isspace()当str所有字符都是空格,返回True,否则返回False
str.replace(old,new[,count])返回字符串str的副本,所有old子串被替换为new,如果count给出,则前count次old出现被替换。查找字符串所有匹配项并替换,返回字符串。
str.split(sep=None,maxsplit=-1)返回一个列表,由str根据sub子串出现的次数。用来将字符串分隔成序列。如果不指定分隔符,则空格、换行符、制表符等都将被认为是分隔符,把连续多个空白字符看作一个分隔符。
str.join(iterable)用来连接元组、列表等中的元素,注意其元素一定要是字符串。返回一个新字符串,由组合数据类型iterable变量的每个元素组成,元素间用str分隔。
str.find()可以在一个较长的字符串中查找子串,并返回子串所在位置的左端索引位置,如果没有找到则返回-1
str.strip([chars])去掉字符串两侧的空格,并返回字符串。返回字符串str的副本,在其左侧和右侧去掉chars中列出的字符。
>>> a='Python'
>>> a.lower()
'python'
>>> a.upper()
'PYTHON'
>>> string = 'Python is a programming language.'
>>> string.replace('a','A')
'Python is A progrAmming lAnguAge.'
>>> string.split()
['Python', 'is', 'a', 'programming', 'language.']
>>> s="2017-10-31"
>>> s.split("-")
['2017', '10', '31']
>>> a=["1","2"]
>>> "t".join(a)   # "t"为连接符
'1t2'
>>> b=s.split("-")
>>> '/'.join(b)

>>> s="apple,peach,banana,peach,pear"
>>> s.find("peach")
6
>>> s.find("peach",7)  #从7位置字符开始往后找
19

>>> string = '   Python is a programming languages'
>>> string.strip()
'Python is a programming languages'

思考题:

>>>x='aaa bb c d e fff '
>>>b=','.join(x.split())
>>>b
结果为:
'aaa,bb,c,d,e,fff'
>>>b.replace("c",'cc').upper()
'AAA,BB,CC,D,E,FFF'

3.6 字符串类型的格式化

要点:字符串通过format()方法进行格式化

3.6.1 format()方法的基本使用

字符串format()方法的基本使用格式是:

<模板字符串>.format(<逗号分隔的参数>)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2poXWRZN-1593708679984)(/Users/eve/Desktop/PYTHON/SchoolCourse/第3章 基本数据类型/Picture/屏幕快照 2020-06-06 15.04.15.png)]

  • format方法:位置匹配

    • 不带编号,即“{}”:

      >>> '{} {}'.format('hello','world')
      'hello world'
      
    • 带数字编号,可调换顺序,即“{1}”、“{2}

      >>> '{0} {1} {0}'.format('hello','world')
      'hello world hello'
      
    • 带关键字,即“{a}”、“{tom}”:

      >>> '{a} {tom}'.format(a='hello',tom='world')
      'hello world'
      

3.6.2 format()方法的格式控制

format方法:格式转换

'{[位置匹配][:格式]}'.format()

格式说明
b输出整数的二进制
c输出整数对应的Unicode字符
d输出整数的十进制
o输出整数的八进制
x输出整数的小写十六进制
X输出整数的大写十六进制
e输出浮点数对应的小写字母e的指数形式
E输出浮点数对应的大写字母E的指数形式
f输出浮点数的标准浮点形式
%输出浮点数的百分形式
m,n控制输入的宽度,精度
千分位的分隔符
>>> '{:o}'.format(10)
'12'
>>> "Pi is {pi:5.2%}".format(pi=3.14159)
'Pi is 314.16%'
>>> "{:.3}".format(1/3)
'0.333'
>>> '{0:,%}'.format(1000/3)
'33,333.333333%'
格式说明
<左对齐
>右对齐
^居中
>>> "Pi is {:#<10.2f}".format(3.1415)
'Pi is 3.14######'

思考

请写出下面的结果:

print('树立{0}命运{1}'.format('人类','共同体意识'))
print('2/3约等于{0:.2f}'.format(2/3))
print('{:+>10}'.format('守望相助'))
树立人类命运共同体意识
2/3约等于0.67
++++++守望相助
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值