python基础(三)

本文介绍了Python的基础容器类型,包括字符串、列表、元组、字典和集合。讲解了它们的特点、操作方法以及相关练习,如字符串的编码、列表的索引与切片、字典的键值对操作等,帮助读者深入理解Python的容器类型。
摘要由CSDN通过智能技术生成


容器类型

1.字符串str

定义:由一系列字符组成的不可变序列容器,存储的是字符的编码值。
字符串不可变

name = "大强"
name = "小强"
print(name)#小强

内存图:在这里插入图片描述

编码:

  1. 字节Byte :计算机最小存储单位,等于8位bit。【bit B、KB、MB、G、T】
    1B = 8 bit 1KB =1024B 1MB = 1024KB 1G = 1024MB 1T=1024G (常识)
    在这里插入图片描述

  2. 字符∶单个的数字,文字与符号。

  3. 字符集(码表):存储字符与二进制序列的对应关系。在这里插入图片描述

  4. 编码∶将字符转换为对应的二进制序列的过程。

  5. 解码:将二进制序列转换为对应的字符的过程。

  6. 编码方式:

    (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:
在控制台中获取一个字符串,要求如下:

  1. 打印第一个字符
  2. 打印最后一个字符
  3. 打印倒数第三个字符
  4. 打印前两个字符
  5. 倒序打印字符
  6. 如果字符串长度是奇数,则打印中间字符。
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 =["张无忌","赵
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值