容器类型
1.字符串str
定义:由一系列字符组成的不可变序列容器,存储的是字符的编码值。
字符串不可变
name = "大强"
name = "小强"
print(name)#小强
内存图:
编码:
-
字节Byte :计算机最小存储单位,等于8位bit。【bit B、KB、MB、G、T】
1B = 8 bit 1KB =1024B 1MB = 1024KB 1G = 1024MB 1T=1024G (常识)
-
字符∶单个的数字,文字与符号。
-
字符集(码表):存储字符与二进制序列的对应关系。
-
编码∶将字符转换为对应的二进制序列的过程。
-
解码:将二进制序列转换为对应的字符的过程。
-
编码方式:
(1)ASCII编码∶包含英文、数字等字符,每个字符1个字节。字节最大的整数是255。
(2)GBK编码:兼容ASCII编码,包含21003个中文;英文1个字节,汉字2个字节。
(3)Unicode字符集:国际统一编码,旧字符集每个字符2字节,新字符集4字节。
(4)UTF-8编码(常用):Unicode的存储与传输方式,英文1字节,中文3字节。
相关函数
"""
str编码
"""
#字符串—->编码值(数字)
num01 = ord( "a")
print( num01) #97
#编码值(数字)-->字符串
str01 = chr(97)
print(str01) #a
练习1:在控制台中,获取一个字符串,打印每个字符的编码值。
str = input("请输入一个字符串:")
for item in str:
print(ord(item))
运行结果:
请输入一个字符串:yh
121
104
练习2:在控制台中,重复录入一个编码值,然后打印字符,如果输入空字符串,则退出程序。
while True:
str_code = input("请输入一个编码值:")
if(str_code == ""):
break
code_value = int(str_code)
print(chr(code_value))
运行结果:
请输入一个编码值:97
a
请输入一个编码值:98
b
请输入一个编码值:95
_
请输入一个编码值:55
7
字面值+转义符
"""
str字面值
转义符:改变原始字符含义的符号
"""
name1 ="苏大强"
name2 ='苏大强'
print(name1)
print(name2)
# 单引号内的双引号不算结柬符
message1 ='我叫"苏大强"。'
print(message1)
# 双引号内的单引号不算结柬符
message2 ="我叫'苏大强'。"
print(message2)
# 可见即所得
name3 = """苏
大强 """ #占用内存,如果是注释不需要占用内存
print(name3)
# 转义符:\" \n \t \\ 【\a,\b也是,但是不需要掌握】
message3 ="我叫\"苏大强\"。"
message4 = "我叫\n 苏大强" #换行
message5 ="我叫\t苏大强。"#水平制表格tab键
url = "C:\n Users\a10074\b Desktop"
url2 = "C:\\Users\\10074\\Desktop"
# 原始字符串(没有转义符)
url3 = r"C:\Users\10074\Desktop"
print(message3)
print(message4)
print(message5)
print(url)
print(url2)
print(url3)
运行结果:
苏大强
苏大强
我叫"苏大强"。
我叫'苏大强'。
苏
大强
我叫"苏大强"。
我叫
苏大强
我叫 苏大强。
C:
Users1007 Desktop
C:\Users\10074\Desktop
C:\Users\10074\Desktop
字符串格式化
# 字符串格式化
a = "1"
b = "2"
# 在字符串中插入变量
# 请输入1+2=?
# 字符串拼接(缺点:乱)
str01 = "请输入"+a+"+"+b+"=?"
print(str01)
# %s 代表字符串
# %d 代表整数
# %f 代表浮点数
str02 = "请输入%s+%s=?"%(a,b)
str03 = "请输入%s+%.1f=?"%("1",10.560)
print(str02)
print(str03)
运行结果:
请输入1+2=?
请输入1+2=?
请输入1+10.6=?
2.通用操作
"""
通用操作str
"""
str01 ="悟空"
str02 ="八戒"
# 字符串拼接
str03 = str01 + str02
print(str03)#悟空八戒
# 字符串累加
str01 += str02
print(str01)#悟空八戒
# 重复生成元素
print(str02 * 5)#八戒八戒八戒八戒八戒
str02 *= 5
print(str02)#八戒八戒八戒八戒八戒
# 依次比较两个容器中元素,一但不同则返回比较结果。
print("悟空">"八戒") # True
print("a悟空">"b八戒") # False
# 成员运算符
print("齐大圣" in "我叫齐天大圣") #False
print("齐天大圣" in "我叫齐天大圣")#True
索引(重点,定位单个元素)
#索引(索引是整数)
message = "我叫齐天大圣"
#获取正数第三个字
print(message[2])#齐
#获取最后一个字
print(message[-1])#圣
切片(重点,定位多个元素)
#切片
message = "我叫齐天大圣"
print(message[0:2])# 我叫
# 开始值默认为开头
print(message[:2])# 我叫
print(message[-2:-1])# 大
# 结束值默认为末尾
print(message[-2:])# 大圣
print(message[:])# 我叫齐天大圣
# 步长默认为1
print(message[-2:-5:-1])# 大天齐
print(message[::-1])# 圣大天齐叫我
print(message[1:1])#空
print(message[3:1])#空
print(message[3:1:-1])#天齐
# (切片不能切断)
print(message[-2:1])#空
#IndexError: string index out of range,索引不能越界
#print(message[7])
print(message[2])#齐
#切片越界不报错
print(message[1:7])#叫齐天大圣
练习1:
在控制台中获取一个字符串,要求如下:
- 打印第一个字符
- 打印最后一个字符
- 打印倒数第三个字符
- 打印前两个字符
- 倒序打印字符
- 如果字符串长度是奇数,则打印中间字符。
str_value = input("请输入一个字符串:")
print(str_value[0])
print(str_value[-1])
print(str_value[-3])
print(str_value[:2])
print(str_value[::-1])
if len(str_value) % 2 == 1:
print(str_value[len(str_value)//2])
运行结果:
请输入一个字符串:我是齐天大圣哈
我
哈
大
我是
哈圣大天齐是我
天
练习2:按照以下格式,输出变量name =“悟空”,age = 800,score= 99.5【我叫xx,年龄是xx,成绩是xx。】
print("我是%s,年龄是%d,成绩是%.1f"%("悟空",800,99.5))
运行结果:
我是悟空,年龄是800,成绩是99.5
练习3:在控制台中获取一个整数作为边长。根据边长打印矩形。【不考虑整数<=1】
side_length = int(input("请输入一个整数:"))
str01 = "*"
str02 = " "
print(str01 * side_length)
for item in range(side_length-2):
print(str01 * 1+ str02 * (side_length-2)+str01 * 1)
print(str01 * side_length)
运行结果:
请输入一个整数:4
****
* *
* *
****
练习4:在控制台中录入一个字符串,判断是否为回文。【判断规则:正向与反向相同,上海自来水来自海上】
str_value = input("请输入一个字符串:")
if str_value == str_value[::-1]:
print("它是回文数")
else:
print("它不是回文数")
运行结果:
请输入一个字符串:上海自来水是来自海上
它不是回文数
练习5:(扩展)一个小球从100m的高度落下,每次弹回原高度的一半,计算总共弹起来多少次(最小弹起高度0.01m),总共走了多少米。
#不知道循环多少次就用while,知道循环多少次就用for
height = 100
count = 0
distance = height
# 弹起前高度大于最小弹起高度
# while height > 0.01:
# 弹起来的高度大于最小弹起高度
while height/2 > 0.01:
count += 1
# 弹起
height /=2
# 累加起/落高度
distance += height* 2
print("总共弹起来%d次,总共走了%.2f米"%(count,distance))
运行结果:
总共弹起来13次,总共走了299.98米
3.列表list
定义:由一系列变量组成的可变序列容器。
"""
列表
"""
# 1.创建列表
# 空
list01 = []#[]存放数据
list02 = list(容器)#存放容器
#默认值
list03 = ["悟空",100,True]
list04 = list("我是齐天大圣")
#2.获取元素
#索引
print(list04[2])#齐
#切片
print(list04[-4:])#['齐', '天', '大', '圣']
#3.添加元素
#append 追加 (在末尾添加)
list04.append("八戒")
print(list04)#['我', '是', '齐', '天', '大', '圣', '八戒']
#插入(在指定位置添加)
list04.insert(1,True)#在索引为1(第二个)的位置添加True
print(list04)#['我', True, '是', '齐', '天', '大', '圣', '八戒']
# 4.删除元素
# 根据元素删除
list04.remove("是")
print(list04)#['我', True, '齐', '天', '大', '圣', '八戒']
#根据位置删除
del list04[0]
print(list04) #[True, '齐', '天', '大', '圣', '八戒']
del list04[0]
print(list04)#['齐', '天', '大', '圣', '八戒']
# 5.定位元素,目的可以增删改查。
#切片
del list04[1:3]
print(list04)#['齐', '圣', '八戒']
list04[0:2] = ["a","b"]#不会生成新列表
print(list04)#['a', 'b', '八戒']
list04[0:1] = [1,2,3,4,5,6]
print(list04)#[1, 2, 3, 4, 5, 6, 'b', '八戒']
list04[0:1] = []
print(list04)#[2, 3, 4, 5, 6, 'b', '八戒']
#遍历列表
#获取列表中所有元素
for item in list04:
print(item)
# 2
# 3
# 4
# 5
# 6
# b
# 八戒
#倒序获取所有元素
#不建议
#list04[::-1] 通过切片拿元素﹐会重新创建新列表,浪费内存
# for item in list04[: :-1]:
# print(item)
#正向索引排列
# 0 1 2 3
# 3 2 1 0
for item in range(len(list04)-1,-1,-1):
print(list04[item])
# 八戒
# b
# 6
# 5
# 4
# 3
# 2
#反向索引排列
# -1 -2 -3 -4
for item in range(-1,-(len(list04)+1),-1):
print(list04[item])
# 八戒
# b
# 6
# 5
# 4
# 3
# 2
练习1:在控制台中录入,西游记中你喜欢的人物,输入空字符串,打印(一行一个)所有人物。
list_person = []
# 录入过程
while True:
str01 = input("请输入你喜欢的人物:")
if str01 == "":
break
list_person.append(str01)
# 输出过程
for item in list_person:
print(item)
运行过程:
请输入你喜欢的人物:悟空
请输入你喜欢的人物:八戒
请输入你喜欢的人物:唐僧
请输入你喜欢的人物:
悟空
八戒
唐僧
练习2:在控制台中录入所有学生成绩,输入空字符串,打印(一行一个)所有成绩,打印最高分,打印最低分,打印平均分。
list_score = []
#录入过程
while True:
score_input = input("请输入学生成绩:")
if score_input == "":
break
list_score.append(int(score_input))
#输出过程
for item in list_score:
print(item)
print("最高分:"+str(max(list_score)))
print("最低分:"+str(min(list_score)))
print("最低分:"+str(sum(list_score)/len(list_score)))
运行结果:
请输入学生成绩:54
请输入学生成绩:94
请输入学生成绩:85
请输入学生成绩:38
请输入学生成绩:
54
94
85
38
最高分:94
最低分:38
最低分:67.75
练习3:在控制台中录入所有学生姓名,如果姓名重复,则提示"姓名已经存在”,不添加到列表中,如果录入空字符串,则倒序打印所有学生。
【有多个循环,在最内层里用break语句是跳出最内层循环。】
list_name=[]
while True:
name_input = input("请输入学生姓名:")
if name_input == "":
break
# 判断变量在列表中是否存在
if name_input not in list_name:
list_name.append(name_input)
else:
print("姓名已经存在")
for item in range(-1,-(len(list_name)+1),-1):
print(list_name[item])
运行结果:
请输入学生姓名:张三
请输入学生姓名:李四
请输入学生姓名:张三
姓名已经存在
请输入学生姓名:
李四
张三
列表内存图:
"""
列表内存图
"""
list01 =["张无忌","赵