一、数据类型 -- 数值(number)
1.1 概念
在python3中,支持int float bool complex。数值数据类型的赋值和计算很直观,和我们大多数语言一样的。
(1)整数(int)
包括正整数、负整数、零,没有小数点的数字,也可以使用十六进制、八进制显示。
小整数池的概念:
在Python中,小整数池是一个内置的机制,它确保了在CPython解释器中,对于某些特定范围内的整数,不同的变量可以同时指向同一个对象。这个范围默认是-5到256,但是可以通过Python源码修改这个范围。这个机制主要是为了优化内存和提升性能。
在python中不需要事先规定数据类型以此分配内存单元,所以在python中没有固定的取值范围,python存储的整数可以无限大、无限小。
(2)浮点数(float)
就是小数,带有小数点的数。
inf 无限大
-inf 无限小
NaN 不是数字
a = float('inf')
b = float('-inf')
c = float('NaN')
print(a, b, c)
注意:计算机对于浮点数的计算是不精确的。保存在计算机中的都应该是二进制,而二进制对于整数的表示是精确的,对于小数的表示是不精确,只能非常接近这个数。
在进行浮点数的计算的时候,一定要特别小心。
(3)布尔值(bool)
只有两个值 True False。
a = 0
b = 10
c = a and b
print(type(c))
print(c)
d = bool(a and b)
print(type(d))
print(d)
布尔值短路现象
# e = 100<200 and 50<(3/0) #and 条件1为真 条件2需要判断
# print(e)
# e = 100>200 and 50<(3/0) #and 条件1为假 条件2不需要判断
# print(e)
# e = 100<200 or 50<(3/0) # or 条件1为真 条件2不需要判断
# print(e)
(4)复数(complex)
复数由两部分——实部和虚部组成,用 a + bj的形式表示,也可以使用内置函数complex(a,b)表示。其中a和b都是小数。
可以执行百度复数的应用场景或者应用价值【了解即可】。
comp_1 = 3+5j
print(comp_1)
print(type(comp_1))
comp_2 = complex(3,5)
print(comp_2)
print(type(comp_2))
1.2 数字类型的转换
在使用Python语言中数据类型的转换分为显式转换和隐式转换,
隐式类型转换在程序计算的时候自动发生比如使用1.0+1最终隐式类型转换为浮点数2.0。
显式类型的转换可以使用以下函数完成。
练习 1.输入一个单字符,判断是大写字母输出对应小写字母, 是小写字母输出对应大写字母, 是数字字符输出对应整数, 是其他字符直接输出。
char = input("请输入一个字符:")
if "A" <= char <= "Z":
print(char.lower())
elif "a" <= char <= "z":
print(char.upper())
elif "0" <= char <= "9":
print(ord(char)-48)
else:
print(char)
1.3 数学函数
函数 | 返回值 ( 描述 ) |
abs(x) | 返回数字的绝对值,如abs(-10) 返回 10 |
ceil(x) | 返回数字的上入整数,如math.ceil(4.1) 返回 5 |
exp(x) | 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045 |
fabs(x) | 以浮点数形式返回数字的绝对值,如math.fabs(-10) 返回10.0 |
floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4 |
log(x) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
log10(x) | 返回以10为基数的x的对数,如math.log10(100)返回 2.0 |
max(x1, x2,...) | 返回给定参数的最大值,参数可以为序列。 |
min(x1, x2,...) | 返回给定参数的最小值,参数可以为序列。 |
modf(x) | 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。 |
pow(x, y) | x**y 运算后的值。 |
round(x [,n]) | 返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。 其实准确的说是保留值将保留到离上一位更近的一端。 |
内置函数:内置函数是Python自带的函数,不依赖于任何对象,可以直接在任何地方调用。常见的内置函数如len(), type(), max()等。内置函数用于执行一些通用的操作,比如获取序列的长度、找出最大值等。
内置方法:内置方法是与特定对象(如列表、字符串、字典、模块等)相关联的函数。它们的调用需要在特定对象上进行。
import math
print(abs(-10))
print(max(1,12,3,4,5))
print(min(1,12,3,-4,5))
print(pow(10,2))
print(round(3.1415, 2))
print(math.fabs(-3.1415))
print(math.ceil(4.1))
print(math.floor(4.1))
print(math.exp(1))
print(math.log(100,10))
print(math.log(8,2))
print(math.modf(3.1415))
二、数据类型 -- 字符串(string)
2.1 概念
在python中用单引号或双引号引起来的内容。
s = 'xiaoming'
s = "xiaoming"
s = '' #空字符串
s = "" #空字符串
s = ' ' #空格字符串
s = " " #空格字符串
注意:
(1)Python语言中,单引号与双引号都没有任何区别
(2)一对单引号中可以包含 双引号
(3)一对双引号中可以包含 单引号
(4)若想在单引号中包含单引号、双引号包含双引号,使用 \ 转义字符处理
2.2 字符串访问
2.2.1 下标索引
所谓的下标,就是人为的编号【从0开始】,就像你去洗澡,澡堂大厅里面有存物柜,店员给你一个手环,该手环对应储物柜的编号。
s = "hello world"
# 通过元素遍历
for i in s:
print(i, end=' ')
print()
# len(s) 计算字符串s的长度 为 7
# range(len(s)) range(7) 区间从0到6
# 通过下标、编号进行遍历
for i in range(len(s)):
print(s[i], end=' ') # i是下标 编号 s[i]通过下标i找到的元素
print()
练习题:
长度为三且各字符不同的子字符串,我们称这个字符串为好字符串, 给你一个字符串s,请你返回s中长度为3的好子字符串的数量,
注意:如果相同的好子字符串出现多次,每一次都应该被记录答案之中, 子字符串是一个字符串中连续的字符序列
s = 'hello'
好子字符串:hel
s = 'helloworld'
好子字符串:hel low wor orl rld
str = "helloworld"
for i in range(len(str)-2):
if str[i]!= str[i+1]!=str[i+2]:
print(str[i]+str[i+1]+str[i+2],end=' ')
2.2.2 切片
切片是对操作对象的某一部分进行操作。对象可以是字符串、列表、元组等。
标识符[起始值:终止值:步长值]
注意:和range函数一样,区间是前闭后开的。
[起始值 , 终止值) 包含起始值 不包含终止值
在python中看见 [:] 一定是切片
切片中的默认值
s = "hello world"
#没有冒号,就是单纯的下标,取到一个元素值
print(s[0])
#省略终止值,默认是序列的结尾 和range函数有区别
print(s[0::1])
#省略起始值,默认是 0
print(s[:3:1])
#省略步长值,默认是 1
print(s[1:3:])
print(s[::])
切片练习题
1. 从键盘输入一个字符串,判断这个字符串是不是回文字符串【使用切片】 回文字符串:就是正着读和倒着读一样的字符串。
s=input("enter the string:")
if s==s[::-1]:
print("是回文字符串")
else:
print("不是回文字符串")
2. 从键盘输入一个字符串,判断这个字符串是不是回文字符串【使用下标】 回文字符串:满足对称性,第一个字符和倒数第一个字符相等, 第二个和倒数第二个字符相等……
s=input("enter the string:")
for i in range(len(s)//2):
if s[i]!=s[-i-1]:
print("不是回文字符串")
break
else:
print("是回文字符串")
2.3 字符串的相关函数
2.3.1 查询相关函数
函数 | 描述 |
find() | 检测字符串是否包含指定字符,如果是返回开始的索引值,否则返回-1 |
index() | 检测字符串是否包含指定字符,如果是返回开始的索引值,否则提示错误 |
rfind() | 从右向左,检测字符串是否包含指定字符,如果是返回开始的索引值,否则返回-1 |
rindex() | 从右向左,检测字符串是否包含指定字符,如果是返回开始的索引值,否则提示错误 |
s = 'hello world'
print(s.find('l'))
print(s.find('lo'))
print(s.find('xxxx'))
print('*'*30)
print(s.index('l'))
print(s.index('lo'))
# print(s.index('xxxx')) 报错
print('*'*30)
print(s.rfind('l'))
print(s.rfind('lo'))
print(s.rfind('xxxx'))
print('*'*30)
print(s.rindex('l'))
print(s.rindex('lo'))
# print(s.rindex('xxxx')) 报错
2.3.2 转换函数
函数 | 描述 |
lower() | 将字符串转换为小写 |
upper() | 将字符串转换为大写 |
title() | 将字符串中每个单词的首字母大写 |
capitalize() | 只讲字符串的首字母大写,其他字母全部小写 |
strip() | 去除字符串两端的空格 |
s = 'hello world'
print(s.lower())
print(s.upper())
print(s.title())
print(s.capitalize())
s1 = " aaaa bbbb cccc "
print(s1.strip())
练习题: 从键盘输入一个字符串,遍历该字符串,将其中的小写字母变大写字母, 大写字母变小写字母。
s=input("enter the string:")
for i in s:
if i.isupper():
print(i.lower(),end="")
elif i.islower():
print(i.upper(),end="")
else:
print(i,end="")
print()
2.3.3 判断函数
函数 | 描述 |
startswith() | 检查字符串是否是以 obj 开头, 是则返回 True,否则返回 False |
endswith() | 检查字符串是否是以 obj 结尾, 是则返回 True,否则返回 False |
isspace() | 如果 str1 中只包含空格,则返回 True,否则返回 False. |
isalnum() | 如果 str1 所有字符都是字母或数字则返回 True,否则返回 False |
isdigit() | 如果 str1 只包含数字则返回 True 否则返回 False |
isalpha() | 如果 str1 所有字符都是字母 则返回 True,否则返回 False |
练习题: 1、从键盘输入一串字符串,先将所有大写转换成小写, 再移除其中的非数字字母字符之后,判断是不是回文字符串
s=input("enter the string:")
str=''
s=s.lower()
for i in range(len(s)):
if s[i].isalnum():
str +=s[i]
if str==str[::-1]:
print("是回文字符串")
else:
print("不是回文字符串")
print(str)
2.3.4 分割函数
函数 | 描述 |
partition | 可以将字符串以str1进行分隔成三个部分 |
rpartition | 从右向左,可以将字符串以str1进行分隔成三个部分 |
split | 不包含分隔符,如果maxsplit有指定值,则仅分割 maxsplit 个子字符串 |
splitlines | 按照行分隔,返回一个包含各行作为元素的列表 |
s = 'hello world china ShangHai'
s1 = s.partition('china')
print(s1, type(s1))
s2 = s.split('china')
print(s2, type(s2))
s3 = s.split(' ')
print(s3, type(s3))
m = 'hello\nworld\nchina\nShangHai'
s4 = m.splitlines()
print(s4, type(s4))
2.3.5 其他函数
函数 | 描述 |
count | 返回str1在string中指定索引范围内[start,end]出现的次数 |
join | 是使用某个字符串作为拼接符 print( 字符串.join(变量) ) |
replace | 将string中的str1替换成str2,如果指定count,则不超过count次 |
len | 返回字符串的长度值 |
练习题1:
a) 将"good good study , day day up;"保存到变量mstr中。
b) 将" No Pain No Gain. "保存到变量nstr中。
c) 将mstr和nstr合并,并输出。
d) 求mstr的长度并输出
e) 遍历字符串nstr
f) 统计nstr中字母'o'的个数
g) 去除nstr两端的空格
h) mstr所有的字符换成大写并输出。
i) mstr所有的字符换成小写并输出。
j) 以空格为分割符将mstr分割并输出。
mstr="good good study , day day up;"
nstr=" No Pain No Gain. "
print(mstr+nstr)
print(len(mstr))
for i in nstr:
print(i,end=" ")
print(nstr.count('o'))
print(nstr.strip())
print(mstr.upper())
print(mstr.lower())
print(mstr.split())
练习题2: 输入两个字符串,从第一个字符串中删除第二个字符串中所有字符。
例如:输入"abcde"和"be" 字符串变为"acd" 提示:
①使用in关键字判断元素存在
②使用replace内置方法进行元素替换
a="abcde"
b="be"
for i in b:
a=a.replace(i,"")
print(a)
练习题3: 输入一个字符串,将这个字符串按照单词反序。
例如:输入"this is a book" , 输出 "book a is this" 。
a="this is a book"
b=a.split()[::-1]
print(" ".join(b))