文章目录
- 第三章 基本数据类型
- 3.1 数字类型
- 3.1.1 整数类型
- 3.1.2 浮点数类型
- 3.1.3 复数类型
- 3.2 数字类型的运算
- 3.2.1 数值运算操作符
- 3.2.2 数值运算函数
- 3.3 字符串类型及格式化
- 3.3.1 字符串的索引
- 3.3.2 字符串的切片
- 3.3.3 format()方法的基本使用
- 3.3.4 format()方法的格式控制
- 3.4 字符串类型的操作
- 3.4.1 字符串操作符
- 3.4.2 字符串处理函数
- 3.4.3 字符串处理方法
- 3.5 类型判断和类型问间转换
- 3.6 实例解析——恺撒密码
- 习题3
- 一、选择题
- 二、编程题
第三章 基本数据类型
3.1 数字类型
Python语言提供3种数字类型:整数类型、浮点数类型和复数类型,分别对应数学中的整数、实数和复数。
3.1.1 整数类型
整数类型有4中进制表示:十进制、二进制、八进制和十六进制。默认情况整数采用十进制,其他禁制需要增加引导符号。
不同进制的整数之间可以直接运算。
进制类型 | 引导符号 | 描述 |
---|---|---|
十进制 | 无 | 默认情况,例:1010,-1010 |
二进制 | 0b或0B | 由字符0和1组成,例:0b1010,0B1010 |
八进制 | 0o或0O | 由字符0到7组成,例:0o1010,0O1010 |
十六进制 | 0x或0X | 由字符0到9、a到f或A到F组成,例:0x1010 |
3.1.2 浮点数类型
表示带有小数点及小数的数值。Python语言中的浮点数类型必须带有小数部分,小数部分可以是0.例如:1010是整数,1010.0是浮点数。
浮点数有2种表示方法:十进制形式的一般表示和科学计数法表示。除十进制外,浮点数没有其他进制表示形式。
科学计数法使用字母e或者E作为幂的符号,以10为基数,含义如下:
<a>e<b> = a*10^b
Python浮点数类型的数值范围和小数精度受不同计算机系统的限制。除高精度科学计算外的绝大部分运算来说,浮点数类型的数值范围和小数精度足够可靠。
3.1.3 复数类型
复数类型表示数学中的复数。复数有一个基本单位元素j,叫作”虚数单位“。含有虚数单位的数被称为复数。
Python语言中,复数可以看作是二元有序实数对(a,b),表示:a+bj,其中a是实数部分,简称实部,b是虚数部分,简称虚部。虚数部分通过后缀”J“或者”j“来表示。需要注意,当b为1时,1不能省略,即1j表示复数,而j则表示Python程序中的一个变量。
复数类型中实部和虚部都是浮点类型,对于复数z,可以用z.real和z.imag分别获得它的实数部分和虚数部分
3.2 数字类型的运算
3.2.1 数值运算操作符
操作符 | 描述 |
---|---|
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与y之商的余数,也被称为模运算 |
-x | x的负值,即:x*(-1) |
+x | x本身 |
x ** y | x的y次幂 |
数值运算可能改变结果的数据类型,类型的改变与运算符有关,有如下基本规则:
- 整数和浮点数混合运算,输出结果是浮点数
- 整数之间运算,产生结果类型与操作符相关,/运算的结果是浮点数
- 整数或浮点数与复数运算,输出结果是复数。
3.2.2 数值运算函数
函数 | 描述 |
---|---|
abs(x) | x的绝对值 |
divmod(x,y) | (x//,x%y),输出为二元组形式,也成为元组类型 |
pow(x,y)或pow(x,y,z) | (x**y)%z,z表示该参数可以省略,幂运算 |
round(x)或round(x,d) | 对x四舍五入,保留d位小数。round(x)返回四舍五入的整数值 |
max(x1,x2,…xn) | x1,x2…xn的最大值,n没有限定,可以任意数量 |
min(x1,x2,…xn) | x1,x2…xn的最小值,n没有限定,可以任意数量 |
3.3 字符串类型及格式化
字符串是字符的序列表示,根据字符串的内容多少分为单行字符串和多行字符串。
单行字符串可以由一对单引号(')或双引号(")作为边界来表示,单引号和双引号作用相同。
多行字符串可以由一对三单引号(‘’')或三双引号(“”")作为边界来表示,两者作用相同。
Python语言转义符:\
例如:\n表示换行、\\表示反斜杠、\'表示单引号、\"表示双引号、\t表示制表符(TAB)等。
3.3.1 字符串的索引
对字符串中某个字符的检索被称为索引。索引的使用方式如下:
<字符串或字符串变量>[序号]
如果字符串长度为L,正向递增需要以最左侧字符序号为0,向右依次递增,最右侧字符序号为L-1。
反向递减序号以最右侧字符序号为-1,向左依次递减,最左侧字符序号为-L。
3.3.2 字符串的切片
对字符串中某个字串或区间的检索称为切片。切片的使用方式如下:
<字符串或字符串变量>[N:M]
切片获取字符串从N到M(不包含M)的子字符串,其中N和M为字符串的索引序号,可以混合使用正向递增序号和反向递减序号。切片要求N和M都在字符串的索引区间,如果N大于等于M,则返回空字符串。如果N缺失,则默认将N设为0;如果M缺失,则默认表示字符串结尾。
3.3.3 format()方法的基本使用
字符串format()方法的基本使用格式如下:
<模板字符串>.format(<逗号分隔的参数>)
其中模板字符串是一个由字符串和槽组成的字符串,用来控制字符串和变量的显示效果。槽用大括号({})表示,对应format()方法中逗号分隔的参数。如果模板字符串有多个槽,且槽内没有指定序号,则按照槽出现的顺序分别对应format()方法中的不同参数,参数从0开始编号。
3.3.4 format()方法的格式控制
format()方法中模板字符串的槽除了包括参数序号,还可以包括格式控制信息。
{<参数序号>:<格式控制标记>}
其中格式控制标记用来控制参数显示时的格式。格式控制标记包括:
: | <填充> | <对齐> | <宽度> | <,> | <精度> | <类型> |
---|---|---|---|---|---|---|
引导符号 | 用于填充单个字符 | <左对齐 >右对齐 ^居中对齐 | 槽的设定输出宽度 | 数字的千位分隔符,适用于整数和浮点数 | 浮点数小数部分的精度或字符串的最大输出长度 | 整数类型:b,c,d,o,x,X 浮点数类型:e,E,f,% |
<填充>、<对齐><宽度>主要用于对显示格式的规范。
宽度指当前槽的设定输出字符宽度,如果该槽参数实际值比宽度设定值大,则使用参数实际长度。如果该值的实际位数小于指定宽度,则按照对齐指定方式在宽度内对齐,默认以空格字符补充。
对齐字段分别使用<、>和^三个符号表示左对齐、右对齐和居中对齐。
填充字段可以修改默认填充字符,填充字符只能有一个。
<.精度><类型>主要用于对数值本身的规范。
<.精度>由小数点(.)开头。对于浮点数,精度表示小数部分输出的有效位数。对于字符串,精度表示输出的最大长度。小数点可以理解为对数值的有效截断。
<类型>表示输出整数和浮点数类型的格式规则。
对于整数类型,输出格式包括6种:
- b:输出整数的二进制方式
- c:输出整数对应的Unicode字符
- d:输出整数的十进制方式
- o:输出整数的八进制方式
- x:输出整数的小写十六进制方式
- X:输出整数的大写十六进制方式
对于浮点数类型,输出格式包括4种:
- e:输出浮点数对应的小写字母e的指数形式
- E:输出浮点数对应的大写字母E的指数形式
- f:输出浮点数的标准浮点形式
- %:输出浮点数的百分形式
3.4 字符串类型的操作
3.4.1 字符串操作符
操作符 | 描述 |
---|---|
x + y | 连接两个字符串x与y |
x * n或n * x | 复制n次字符串x |
x in s | 如果x是s的子串,返回True,否则返回False |
3.4.2 字符串处理函数
函数 | 描述 |
---|---|
len(x) | 返回字符串x的长度,也可返回其他组合数据类型的元素个数 |
str(x) | 返回任意类型x所对应的字符串形式 |
chr(x) | 返回Unicode编码x对应的单字符 |
ord(x) | 返回单字符x表示的Unicode编码 |
hex(x) | 返回整数x对应十六进制数的小写形式字符串 |
oct(x) | 返回整数x对应八进制数的小写形式字符串 |
3.4.3 字符串处理方法
方法也是一个函数,只是调用方式不同。
函数采用func(x)方式调用。
方法则采用< a >.func(x)形式调用即A.B()形式。以前导对象< a >为输入。
方法 | 描述 |
---|---|
str.lower() | 返回字符串str的副本,全部字符小写 |
str.supper() | 返回字符串str的副本,全部字符大写 |
str.split(sep=None) | 返回一个列表,由str根据sep被分割的部分构成,省略sep默认以空格分隔 |
str.count(sub) | 返回sub字串出现的次数 |
str.replace(old,new) | 返回字符串str的副本,所有old子串被替换为new |
str.center(width,fillchar) | 字符串居中函数,fillchar参数可选 |
str.strip(chars) | 从字符串str中去掉在其左侧和右侧chars中列出的字符 |
str.join(iter) | 将iter变量的每一个元素后增加一个str字符串 |
3.5 类型判断和类型问间转换
Python语言提供type(x)函数对变量x进行类型判断,适用于任何数据类型。
数值运算操作符可以隐式地转换输出结果的数字类型,例如:两个整数采用运算符”/“的除法将可能输出浮点数结果。此外,通过内置的数字类型转换函数可以显式地在数字类型之间进行转换。
函数 | 描述 |
---|---|
int(x) | 将x转换为整数,x可以是浮点数或字符串 |
float(x) | 将x转换为浮点数,x可以是整数或字符串 |
str(x) | 将x转换为字符串,x可以是整数或浮点数 |
3.6 实例解析——恺撒密码
恺撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面的第三个字符,即循环右移3位:
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
原文字符P,其密文字符C满足如下条件:C = ( P + 3 ) mode 26
解密方法反之,满足:P ( C - 3 ) mod 26
# 恺撒密码——加密
# 恺撒密码的加密算法程序首先接收用户输入的文本,然后对字母a-z和字母A-Z按照密码算法进行转换
txt=input("请输入待加密的明文密码:")
for p in txt:if "a" <= p <= "z":print(chr(ord("a")+(ord(p)-ord("a")+3)%26),end="")elif "A" <= p <="Z":print(chr(ord("A") + (ord(p) - ord("A") + 3) % 26), end="")else:print(f"{p}",end="")# 恺撒密码——解密
# 恺撒密码的解密算法程序首先接收用户输入的加密文本,然后对字母a-z和字母A-Z按照密码算法进行反向转换
txt = input("请输入待解密的密文:")
for p in txt:if "a" <= p <= "z":print(chr(ord("a") + (ord(p) - ord("a") - 3) % 26), end="")elif "A" <= p <= "Z":print(chr(ord("A") + (ord(p) - ord("A") - 3) % 26), end="")else:print(f"{p}", end="")
习题3
一、选择题
-
以下是八进制数字的是:______
A 0b072 B 0a1010 C 0o711 D 0x456
正确答案:C
-
以下字符串合法的是:______
A “abc’def’ghi” B “I love “love” Python” C “I love Python” D 'I love 'Python"
正确答案:A
-
Python程序采用Unicode编码,英文字符和中文字符在Python中分别对应字符的个数是:______
A 1;1 B 1;2 C 2;1 D 2;2
正确答案:A
-
以下不是Python内置数据类型的是:______
A char B int C float D list
正确答案:A
-
Python支持复数类型,以下说法错误的是:______
A 实部和虚部都是浮点数 B 表示复数的语法是real+image j
C 1+1j是复数 D 虚部后缀j必须是小写形式
正确答案:D
-
以下是print(‘\nPython’)语句运行结果的是:______
A 在新的一行输出:Python B 直接输出:‘\nPython’
C 直接输出:\nPython D 先输出n,然后新的一行输出Python
正确答案:A
-
字符串:s = ‘abcde’,n是字符串s的长度。索引字符串s字符’c’,哪个语句是正确的?______
A s[n/2] B s[(n+1)/2] C s[n//2] D s[(n+1)//2]
正确答案:C
-
以下不是Python内置函数的是:______
A int() B float() C len() D string()
正确答案:D
-
以下能够根据逗号’,'分隔字符串的是:______
A s.split() B s.strip() C s.center D s.replace()
正确答案:A
-
以下能够同时作用于所有数字类型和字符串类型的函数是:______
A len() B complex() C type() D bin()
正确答案:C
二、编程题
-
获得用户输入的一个整数,输出该整数百位及以上的数字。
num = int(input("请输入一个整数:")) if num >= 100:print(f"该整数百位及以上的数字是:{num // 100}")
-
获得用户输入的一个字符串,将字符串按照空格分割,然后逐行打印出来。
content = input("请输入一段字符串:") content1 = content.split() for i in content1:print(i)
-
程序读入一个表示星期几的数字(1-7),输出对应的星期字符串名称。例如:输入3,返回“星期三”。
num = int(input("请输入表示星期几的数字(1-7):")) if num == 1:print(f"星期一") elif num == 2:print(f"星期二") elif num == 6:print(f"星期三") elif num == 4:print(f"星期四") elif num == 5:print(f"星期五") elif num == 6:print(f"星期六") elif num == 7:print(f"星期日") else:print("输入错误!")
-
设n是一任意自然数,如果n的各位数字反向排列所得自然数与n相等,则n被称为回文数。从键盘输入一个5位数字,请编写程序判断这个数字是不是回文数。
num = input("请输入一个5位数字:") if num == num[::-1]:print(f"{num}是回文数") else:print(f"{num}不是回文数")
-
输入一个十进制整数,分割输出其二进制、八进制、十六进制字符串。
decimal_num = int(input("请输入一个十进制整数:"))bin_num = bin(decimal_num)[2:] # 二进制 oct_num = oct(decimal_num)[2:] # 八进制 hex_num = hex(decimal_num)[2:] # 十六进制print(f"二进制数字为:{bin_num}") print(f"八进制数字为:{oct_num}") print(f"十六进制数字为:{hex_num}")