python学习

本文介绍了Python中的字典和字符串基本概念,如字典的无序性、可变性及键值对特性,以及字符串的不可变性和相关操作。详细讲解了字典的增删改查,包括获取值、添加和修改元素、删除键值对。此外,还探讨了字符串的转义字符、查找和相关操作,如合并字符串、判断子串等。文章提供了多个实例帮助理解这些概念和操作。
摘要由CSDN通过智能技术生成

day5 字典和字符

1.字典

1)字典和列表的选择

""" 如果需要同时保存多个意义相同的数据使用列表; 同时保存多个意义不同的数据就使用字典。 """

2) 什么是字典

""" 1). 字典是容器型数据类型;将{}作为容器的标志,里面多个键值对(元素)用逗号隔开: {键1:值1,键2:值2……} 2). 字典是可变的 字典是无序的 3). 字典的元素必须是键值对 键: 必须是不可变的类型的数据(字符串、数字、布尔、元组等,一般使用字符串作为键) 键是唯一的:一个字典中同一个键只能出现一次 值: 可以是任何类型的数据 """
# 1)空字典
d1 = {}

# 2)字典是无序的
print({'a': 10, 'b': 20} == {'b': 20, 'a': 10})

# 3)字典的键必须是不可变类型的数据
# d2 = {'a': 10, 'b': 20, [10,9]: 2}  会报错,因为列表是可变的,不能作为键(字典也不能作为键)

# 4)键是唯一的
d2 = {'a': 10, 'a': 100, 'b': 20}
print(d2)
# 输出结果为{'a': 100, 'b': 20},只保存了一个a的值

# 5)值可以是任何类型的数据
stu = {'name': '小明', 'gender': '男', 'age': 18, 'height': 97, '体重': 40, 'score': 67}
class1 = {
    'name': 'python2301',
    'teacher': {'name':'余婷','age':18,'tel':'16754321865'},
    'students':[{'name':'小马','age':18,'专业':'计算机'},
                {},
                {}
                ]
}
# 老师的键对应的值是字典
# 学生的键对应的是列表,列表中每一个字典表示一个学生的信息

2. 字典的增删改查

1). 查

获取字典的值
a. 查单个
字典[键]
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色'}
print(dog['name'])
class1 = {
    'name': 'python2301',
    'teacher': {'name': '余婷', 'age': 18, 'tel': '13678192302'},
    'students': [
        {'name': 'stu1', 'age': 19, 'school': '清华大学', '专业': '经济', 'contact': {'name': '张三', 'tel': '110'}},
        {'name': 'stu2', 'age': 28, 'school': '北京大学', '专业': '大数据', 'contact': {'name': '李四', 'tel': '192'}},
        {'name': 'stu3', 'age': 22, 'school': '厦门大学', '专业': '计算机', 'contact': {'name': '王五', 'tel': '920'}},
        {'name': 'stu4', 'age': 17, 'school': '南京大学', '专业': '物联网', 'contact': {'name': '赵六', 'tel': '2833'}},
    ]
}
# 1)获取班级名称
print(class1['name'])
# 2)获取讲师的名字
print(class1['teacher']['name'])
# 3)获取所有学生的名字和对应的学校
for i in class1['students']:
    print(i['name'],i['school'])
# 4)获取未成年学生的名字
for i in class1['students']:
    if i['age'] < 18:
        print(i['name'])       
# 5)获取所有学生的联系人的电话
for i in class1['students']:
    print(i['contact']['tel'])
# 6)获取第一个学生的联系人的电话
print(class1['students'][0]['contact']['tel'])
遍历, 字典一般不遍历
for 变量 in 字典:
循环体
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色'}
for i in dog:
    print(i)  # 遍历字典依次获取的是所有的键,并没有值

for i in dog:
    print(i, dog[i])  # 由键可以得到相应的值

2) 增 改

字典[键]=值 -----若键不存在则增加;存在则修改
字典.setdefault(键,值)------只能添加
# 案例:给所有没有折扣的商品添加discount的值为1
goods_list = [
    {'id': 'g001', 'price': 89, 'count': 100},
    {'id': 'g001', 'price': 207, 'count': 50, 'discount': 0.9},
    {'id': 'g001', 'price': 102, 'count': 33},
    {'id': 'g001', 'price': 25, 'count': 897, 'discount': 0.88}
]
for i in goods_list:
    i.setdefault('discount', 1)

print(goods_list)

3) 删

del 字典[键] :删除指定键对应的键值对
字典.pop(键): 取走字典中指定键对应的值,键也随之没有了

dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色'} del dog['breed'] print(dog) result = dog.pop('color') print(dog) print(dog, result)

4).字典相关操作

in 和 not in
键 in 字典------判断字典中是否存在指定的键

d1 = {'a': 10, 'b': 20, 'c': 30} print(10 in d1) # False print('a' in d1) # True

3. 字符串

1) 什么是字符串

'''
1) 字符串是容器型数据类型  :同时保存多个文字符号;将单引号或双引号作为容器的标志
                         引号中的每个符号就是字符串的每个元素,表情符号也可以是元素
                         例如:str1='a,v.c'共5个元素,其中逗号和点也是元素
2) 字符串是不可变的;字符串是有序的
3) 元素:引号中的每个独立的符号
        字符串的元素又叫字符
        可以是任何国家任何民族的任何语言的符号,还可以是转义字符
'''
对于打印出来和在字符串中表示的相同的是普通符号

2) 转义字符

4) 转义字符 - 在特定的符号前加入 \ 来表示特殊功能或者特殊意义
\n : 换行
\t : 缩进四个空格(又叫水平制表符,功能相当于tab键)
' : 表示一个普通的单引号
" : 表示一个普通的双引号
\ : 表示一个普通的反斜杠\
# str1 = 'it's me'  会报错
# 解决办法1
str1 = "it's me"
print(str1)
# 解决办法2
str2 = 'it\'s me'
print(str2)

str3 = 'I say:"good!"'
print(str3)
str4 = "I say:\"good!\""
print(str4)

str5 = '\\nabc' # 想输出\nabc ,防止\n发挥换行功能
print(str5)

3) 查

查单个 :字符串[下标]
遍历:(和列表相同)
for 变量 in 字符串:
循环体
for 变量 in range(len(字符串)):
循环体
str2 = 'abc123'
for i in str2:
    print(i)   # 这里的1、2、3并不是数字

4) 相关操作

加法运算 即合并
# 案例:在字符串str4中的每个字符后面添加一个*
s = 'abc'
new_s = ''
for i in s:
    new_s += i + '*'
print(new_s)
乘法运算
字符串 N N字符串 (将字符串中元素重复N次产生一个新的字符串)
比较运算:比较第一对不相等的字符的大小
已知字符x:
判断x是否是数字字母:'0'<= x< ='9'
判断x是否是小写字母:'a'<= x< ='z'
判断x是否是大写字母:'A'<= x< ='Z'
判断x是否是字母:'a'<= x< ='z' or 'A'<= x< ='Z'
# 案例:提取字符串中所有不是数字字符的字符
str1 = '7gs82b5sv445/l3j2l0'
new_s2 = ''
for i in str1:
    if not '0' <= i <= '9':
        new_s2 += i
print(new_s2)
in 和 not in
和列表、字典都不一样
字符串1 in 字符串2 ----- 判断字符串是否是字符串2的子串
str1 = 'abc123'
print('a' in str1)   # True
print('ab' in str1)  # True
print('ac' in str1)  # False

作业

  1. 输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)

例如: 输入**'abcd1234 ' ** 输出**'bd24'**

str1 = 'abcd1234'
str2 = ''
for i in range(1,len(str1),2):
    str2 += str1[i]
print(str2)
  1. 输入用户名,判断用户名是否合法(用户名长度6~10位)

str1 = input('请输入用户名:')
if len(str1) < 6 or len(str1) > 10:
    print('用户名不合法')
  1. 输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)

例如: 'abc' — 合法 '123' — 合法 ‘abc123a’ — 合法

str1 = input('请输入用户名:')
for i in str1:
    if ((not '0'<=i<='9')and(not 'a'<=i<='z'))and (not 'A'<=i<='Z'):
        print('用户名不合法')
        break
  1. 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)

例如: 'abc' — 不合法 '123' — 不合法 'abc123' — 不合法 'Abc123ahs' — 合法 'Abc' — 不合法

str1 = input('请输入用户名:')
for i in str1:
    if ((not '0'<=i<='9')and(not 'a'<=i<='z'))and (not 'A'<=i<='Z') or (not 'A'<='str[0]'<='Z'):
        print('用户名不合法')
        break
  1. 输入一个字符串,将字符串中所有的大写字母取出来产生一个新的字符串

例如:输入**'abFc1shj2A3klBs99+2kDkk'** 输出:**'FABD'**

str1 = 'abFc1shj2A3klBs99+2kDkk'
str2 = ''
for i in str1:
    if 'A'<=i<='Z':
        str2 += i
print(str2)
  1. 输入字符串,将字符串的开头和结尾变成'+',产生一个新的字符串

例如: 输入字符串**'abc123', 输出'+bc12+'**

str1 = 'abc123'
str2 = '+'
for i in range(1,len(str1)-1):
    str2 += str1[i]
str2 += '+'
print(str2)
  1. 输入字符串,获取字符串的中间字符

例如: 输入**'abc1234'** 输出:'1' 输入**'abc123'** 输出**'c1'**

str1 = 'abc123'
str2 = ''
if len(str1)%2 == 0:
    str2 = str1[len(str1)//2-1]+str1[len(str1)//2]
else:
    str2 = str1[len(str1)//2]
print(str2)
  1. (难)写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)

例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8

str1 = 'how are you? Im fine, Thank you!'
str2 = 'you'
for i in range(len(str1)):
    if str1[i] == str2[0]:
        k = i
        for j in range(1,len(str2)):
            k += 1
            if str1[k] == str2[j]:
                print(i)
                break
            
        break
  1. 获取两个字符串中公共的字符

例如: 字符串1为:abcaaa123, 字符串2为: huak3 , 打印:公共字符有:a3

str1 = 'abcaaa123'
str2 = 'huak3'
str3 = ''

for i in str2:
    if i in str1:
        str3 += i
print('公共字符有',str3)
  1. 定义一个变量保存一个学生的信息,学生信心中包括:姓名、年龄、成绩(单科)、电话、性别

student={'name':'小华','age':18,'score':99,'tel':'13425823432','gender':'男'}
print(student)
  1. 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )

  1. 统计不及格学生的个数

count = 0
for i in students:
    if i['score'] <60:
        count +=1
print(count)
  1. 打印不及格未成年学生的名字和对应的成绩

for i in students:
    if i['score'] <60 and i['age']<18:
        print(i['name'],i['score'])
  1. 求所有男生的平均年龄

a = 0
count=0
for i in students:
    if i['gender']== '男':
        a += i['age']
        count +=1
print(a/count)
  1. 打印手机尾号是8的学生的名字

for i in students:
    if i['tel'][-1]== '8':
        print(i['name'])
 
  1. 打印最高分和对应的学生的名字

num =[]
for i in students:
    num.append(i['score'])
print(max(num))
  1. 删除性别不明的所有学生

new_students=students*1
for i in students:
    if i['gender'] =='不明':
        new_students.remove(i)
print(new_students)
  1. 将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

new_students=[]
num=[]
for i in students:
    num.append(i['score'])
num=sorted(num,reverse=True)
for i in num:
    for j in students:
        if i == j['score']:
            new_students.append(j)
print(new_students)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值