Skip to main content

第一课:数据类型

(一)数值

示例一:摄氏度转华氏度

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('狄仁杰'))