第一课:数据类型
(一)数值
示例一:摄氏度转华氏度
t=float(input("摄氏度:"))
h=(t-32)/1.8
print("%f摄氏度=%f华氏度"%(t,h))
print(f'{t:.1f}摄氏度 = {h:.1f}华氏度') #.1表示精确到小数点后1位
示例二:计算圆的面积和周长
r=float(input("圆的半径:"))
s=3.14*r**2
c=3.14*r*2
print(f"面积{s:.1f}",f"周长{c:.1f}")
示例三:英寸厘米互转
value=float(input("请输入数值:"))
unit=input("请输入单位:")
if unit=="英寸":
print(f"{value*2.54:.1f}厘米")
else:
print(f"{value/2.54:.1f}英寸")
print( '%i' % 5 * ( 19 % 5 ) )
(二)字符串
1. 字符串处理
常用字符串处理函数
str1 = 'hello, world!'
| 操作说明 | 示例代码 | 输出结果 | 说明 |
|---|---|---|---|
| 获取字符串长度 | len(str1) | 13 | 包括空格和标点符号 |
| 首字母大写 | str1.capitalize() | Hello, world! | 仅第一个字母大写 |
| 每个单词首字母大写 | str1.title() | Hello, World! | 所有单词首字母大写 |
| 全部大写 | str1.upper() | HELLO, WORLD! | 所有字母变为大写 |
| 查找子串位置(存在) | str1.find('or') | 8 | 返回首次出现的位置 |
| 查找子串位置(不存在) | str1.find('shit') | -1 | 找不到返回 -1 |
| 索引子串位置(存在) | str1.index('or') | 8 | 找到返回位置 |
| 索引子串位置(不存在) | str1.index('shit') | 报错 | 抛出 ValueError 异常 |
| 是否以某字符串开头(False) | str1.startswith('He') | False | 区分大小写 |
| 是否以某字符串开头(True) | str1.startswith('hel') | True | |
| 是否以某字符串结尾 | str1.endswith('!') | True | |
| 居中对齐并填充 | str1.center(50, '*') | ******************hello, world!******************* | 居中填充 |
| 右对齐并填充 | str1.rjust(50, ' ') | hello, world! | 右对齐填充空格 |
| 去除两端空格 | str3.strip() | hello, world! | 去除前后空格 |
2. 字符串检查
| 方法名 | 描述 | 示例 | 返回值 |
|---|---|---|---|
isalnum() | 检查字符串是否完全由字母和数字组成,不包含空格或符号 | "Hello123".isalnum() | True |
isalpha() | 检查字符串是否只包含字母 | "Hello".isalpha() | True |
isdigit() | 检查字符串是否只包含数字 | "12345".isdigit() | True |
isspace() | 检查字符串是否只包含空白字符(如空格、制表符、换行符) | " ".isspace() | True |
islower() | 检查字符串中的所有字母是否都是小写(必须至少包含一个字母) | "hello".islower() | True |
isupper() | 检查字符串中的所有字母是否都是大写(必须至少包含一个字母) | "HELLO".isupper() | True |
istitle() | 检查字符串是否符合标题格式(所有单词的首字母大写) | "Hello World".istitle() | True |
'-9'.isdigit() | 检查是否为数字,负号不是数字字符,因此返回 False | "-9".isdigit() | False |
对于字符串使用find和rfind,如果没找到二者都返回-1
string="I'm so happy taday! me too!"
a=string.find("m")#找第一个
b=string.rfind("m")#找最后一个
print(a)
print(b)
对分行的str的切片操作
viscosity_data = '''air,120,291.15,18.27
nitrogen,111,300.55,17.81
oxygen,127,292.25,20.18'''
v=viscosity_data.split("\n") #一定要注意是\而不是/
print(v)
2. 制表符
换行方法
s1 = '\'hello, world!\''
s2 = '\n\nhello, world!\n'
print(s1, s2, end='')
(三)列表
1. 列表创建
快速生成
f = [x + y for x in 'ABCDE' for y in '1234567']
print(f)
danger
浅拷贝:
在list乘数字时,会把list里面的东西复制,而不是list本身复制
print([1]*5) #[1, 1, 1, 1, 1]
print([[1]*5]) #[[1, 1, 1, 1, 1]]
print([[1]]*5) #[[1], [1], [1], [1], [1]]
但是注意:这种创建方法存在浅拷贝
list1= [[1]] * 5 #实际上创建了 num 个指向同一个子列表 [1] 的引用
list1[1][0]=2
print(list1) #[[2], [2], [2], [2], [2]]
list1= [[1]] * 5
list1[1]=[2]
#没有修改原来的列表 [1],而是改变了 list1 中索引为1的元素的引用,让它指向了一个全新的列表 [2]。
print(list1) #[[1], [2], [1], [1], [1]]
而与之对应的, 下面这种情况就不会出现浅拷贝.
list2 = [1]*5
list2[1]=2
print(list2) #[1, 2, 1, 1, 1]
其根本原因是:int是immutable的,而list是mutable的,所蚁list2里存的就已经是 原数据 而不是 引用指针 了
同理,下面这种也不会有浅拷贝
list1=[[1]*5]
list1[0][0]=8
print(list1) #[[8, 1, 1, 1, 1]]
解决浅拷贝的方法如下
yh = [[1] for _ in range(5)]
yh[1][0] = 2
print(yh) #[[1], [2], [1], [1], [1]]
2. 查找元素
对于列表使用index,没有找到最后一个的函数
string=[23,34,45,56,67,78,89,23]
a=string.index(23)
print(a)
切片
my_list = [1, 2, 3, 4, 5]
my_list[:] = [9] #注意对切片进行修改时一定是修改为list型!!
print(my_list) #[9]
list1=[[1],[2]]
list1[1][:]=[1]
print(list1) #[[1], [1]]
list1=[[1],[2]]
list1[1][0]=[1]
print(list1) #[[1], [[1]]]
3. 元素修改
增加有append,inset
my_list = [1, 2, 3]
my_list.append(4) #在末尾添加4
my_list.insert(1, 4) # 在索引 1 处插入元素 4
减少有remove,pop,del
my_list = [1, 2, 3, 4, 3, 5]
my_list.remove(3) # 删除元素 3 的第一个匹配项
removed_element = my_list.pop(2) # 删除索引 2 处的元素(值为 3)#注意:使用pop不能直接对原值进行修改,需要重新赋值
del my_list[1] # 删除索引 1 处的元素(值为 2)
del my_list # 删除整个列表
(四)字典
1. 字典创建
字典的key的允许类型:字符串、数字类型、元组、布尔值
2. 查找元素
对于字典使用get,并且可以设置默认返回值
scores = {'骆昊': 95, '白元芳': 78, '狄仁杰': 82}
print(scores.get('武则天', 60))#默认返回值60
print(scores.get('狄仁杰'))