字典、元组、字符串习题

目录

一、声明一个字典保存一个学生的信息,学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明)

二、声明一个列表,在列表中保存6个学生的信息(6个题1中的字典)

三、用三个元组表示三门学科的选课学生姓名(一个学生可以同时选多门课)

四、已知字符串 s = "aAsmr3idd4bgs7Dlsf9eAF",要求如下

五、将字符串按照单词进行逆序,空格作为划分单词的唯一条件

六、输入一个字符串,压缩字符串如下aabbbccccbbd变成a2b5c4d1

七、,将字符中单词用空格隔开


一、声明一个字典保存一个学生的信息,学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明)

student = {'姓名':'张三','年龄':23,'成绩':90,'电话':12345,'性别':'男'}

二、声明一个列表,在列表中保存6个学生的信息(6个题1中的字典)

(1) 统计不及格学生的个数

(2) 打印不及格学生的名字和对应的成绩

(3) 统计未成年学生的个数

(4) 打印手机尾号是8的学生的名字

(5) 打印最高分和对应的学生的名字

(6) 删除性别不明的所有学生

(7) 将列表按学生成绩从大到小排序(选做)

#(1)统计不及格学生的个数
student_list = [{'姓名':'张三','年龄':23,'成绩':90,'电话':12345,'性别':'男'},
                {'姓名':'李四','年龄':34,'成绩':45,'电话':45672,'性别':'不明'},
                {'姓名':'王五','年龄':45,'成绩':30,'电话':12785,'性别':'女'},
                {'姓名':'赵柳','年龄':89,'成绩':80,'电话':90432,'性别':'不明'},
                {'姓名':'麻七','年龄':12,'成绩':75,'电话':98473,'性别':'男'},
                {'姓名':'丽丽','年龄':16,'成绩':64,'电话':23532,'性别':'女'}]
# count = 0
# for i in student_list:
#     if(i.get('成绩') < 60):
#         count +=1
# print('不及格学生人数:{}'.format(count))
#
# #(2) 打印不及格学生的名字和对应的成绩
# for i in student_list:
#     if(i.get('成绩') < 60):
#         print('不及格学生的名字是:{},对应的成绩为:{}' .format(i.get('姓名'),i.get('成绩')))


#(3) 统计未成年学生的个数
# count = 0
# for i in student_list:
#     if (i.get('年龄') < 18):
#         count +=1
# print('未成年的个数为:{}'.format(count))

#(4) 打印手机尾号是8的学生的名字
# for i in student_list:
#     if (i.get('电话') % 10 == 2):
#         print('手机尾号为2的学生为:%s' % i['姓名'])

# #(5) 打印最高分和对应的学生的名字
# max = 0
# name = ''
# for i in student_list:
#     if (i.get('成绩') > max):
#         max = i.get('成绩')
#         name = i.get('姓名')
# print('最高分为:{},姓名为:{}'.format(max,name))

#(6) 删除性别不明的所有学生
# s = []
# for i in student_list:
#     if (i.get('性别') == '不明'):
#         continue
#     s.append(i)
# print(s)

#(7) 将列表按学生成绩从大到小排序
'''
Python 内置函数 sorted() 及列表操作函数 sort()
二者的完整语法如下:

1、sort()
List.sort(key=None,reverse=False)
key:排序依据,通常为函数名,如 abs、str.lower、str.upper 等;或以函数指定可迭代对象中的某个元素来进行排序。
reverse:排序规则,reverse=True 降序, reverse=False 升序(默认)。 

2、sorted()     
sorted(iterable,key=None,reverse=False)
iterable:排序对象,如字符串,列表,元组,字典等可迭代对象。
key:排序依据,通常为函数名,如 abs、str.lower、str.upper 等;或以函数指定可迭代对象中的某个元素来进行排序。
reverse:排序规则,reverse=True 降序, reverse=False 升序(默认)。

二者的主要区别是:
sort() 是应用在列表上的方法,是对已经存在的列表进行排序操作并覆盖,无返回值;
sorted() 则可以对所有可迭代的对象进行排序操作,返回的是一个新的列表,而不是在原来的基础上进行的操作。

如果要排序的对象比较复杂,难以用单一参数来实现时,则需要引入匿名函数 lambda。

        通常而言,Python 自定义函数主要有两种方式,一是 def,二便是 lambda。

lambda 函数体比 def 简单很多,比较直观。
lambda 的主体是一个表达式,而不是一个代码块。
lambda 表达式仅能封装有限的逻辑。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

lambda 函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
其中 [arg1 [,arg2,.....argn]] 为入口参数,expression 为函数体。作为函数对象,其也可赋值给一个变量,再利用变量来调用该函数:


'''
student_list.sort(key=lambda x:x['成绩'],reverse=True)
print(student_list)
# len1 = len(student_list)
# for x in range(len1):
#     for y in range(len1 - x - 1):
#         if student_list[y]['成绩'] < student_list[y + 1]['成绩']:
#             student_list[y],student_list[y + 1] = student_list[y + 1],student_list[y]
# print(student_list)

三、用三个元组表示三门学科的选课学生姓名(一个学生可以同时选多门课)

(1) 求选课学生总共有多少人

(2) 求只选了第一个学科的人的数量和对应的名字

(3) 求只选了一门学科的学生的数量和对应的名字

(4) 求只选了两门学科的学生的数量和对应的名字

(5) 求选了三门学生的学生的数量和对应的名字

python = ('stu1','stu2','stu6','stu7','stu9','stu10','stu11')
h5s = ('stu1','stu3','stu6','stu8','stu9')
javas = ('stu1','stu2','stu4','stu5','stu8','stu9')

#(1) 求选课学生总共有多少人
# total = []
# for i in python:
#     if i not in total:
#         total.append(i)
#
# for j in javas:
#     if j not in total:
#         total.append(j)
#
# for k in h5s:
#     if k not in total:
#         total.append(k)
# print(len(total))

#(2)求只选了第⼀个学科的⼈的数量和对应的名字
# only_python = []
# for i in python:
#     if (i not in h5s and i not in javas):
#         only_python.append(i)
# print('只选了第一学科的人数为:{},分别是{}'.format(only_python,len(only_python)))
'''
位置传参是将要传入位置的值当做一个整体(不管是字典还是列表、元组)都当成一个整体传入
如果使用字典或者元组传参,是将元组或者字典里面的内容分别赋值给省略字段名的位置,依次传入(左边大括号数可以小于内容数,从前向后取)
可以同时传递位置参数和关键字参数,省略字段名不能和数字形式的字段名同时出现,关键字参数必须位于位置参数之后

'''
#(3)求只选了一门学科的学生的数量和对应的名字
# only_one = []
# for i in python:
#     if (i not in javas and i not in h5s):
#         only_one.append(i)
#
# for j in javas:
#     if (i not in python and i not in h5s):
#         only_one.append(i)
#
# for i in h5s:
#     if (i not in javas and i not in python):
#         only_one.append(i)
# print('只选了一学科的人数为:{},分别是{}'.format(len(only_one),only_one))

#(4)求只选了两门学科的学生的数量和对应的名字
# only_two = []
# for i in python:
#     if i in h5s and i not in javas:
#         only_two.append(i)
#     elif i in javas and i not in h5s:
#         only_two.append(i)
# for j in h5s:
#     if j in javas and j not in python:
#         only_two.append(j)
#
# print('只选了一学科的人数为:{},分别是{}'.format(len(only_two),only_two))

#(5)求选了三门学生的学生的数量和对应的名字
only_all = []
for i in python:
    if i in h5s and i in javas:
        only_all.append(i)

print('只选了一学科的人数为:{},分别是{}'.format(len(only_all),only_all))

四、已知字符串 s = "aAsmr3idd4bgs7Dlsf9eAF",要求如下

     a.请将s字符串的大写改为小写,小写改为大写: swapcase()

s = "aAsmr3idd4bgs7Dlsf9eAF"
str = []
for i in range(len(s)):
    if ( 'a' <= s[i] <= 'z'):
        str.append(chr(ord(s[i]) - 32))
    elif ('A' <= s[i] <= 'Z'):
        str.append(chr(ord(s[i]) + 32))
    else:
        str.append(s[i])
print(''.join(str))


     b.请将s字符串的数字取出,并输出成一个新的字符串: 循环,isdigit()

s = "aAsmr3idd4bgs7Dlsf9eAF"
str = []
for i in s:
    if '0'<= i <='9':
        str.append(i)
print(''.join(str))


     c.请统计s字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),
         并输出成一个字典。 例 d = {'a':2,'s':1, 'm':1}
       提示:循环,判断字符是否在字典中 'a' in d

s = "aAsmr3idd4bgs7Dlsf9eAF"
str = []
key_value = {}
for i in s:
    if '0' <= i <= '9':
        continue
    elif 'A' <= i <= 'Z':
        str.append(chr(ord(i) + 32))
    else:
        str.append(i)
str_set = set(str)
for j in str_set:
    num = str.count(j)
    key_value[j] = num
print(key_value)


     d.输出s字符串出现频率最高的字母, 如果有多个最高,将每个都输出: max(d.values()),再循环

s = "aAsmr3idd4bgs7Dlsf9eAF"
str = []
key_value = {}
for i in s:
    if '0' <= i <= '9':
        continue
    elif 'A' <= i <= 'Z':
        str.append(chr(ord(i) + 32))
    else:
        str.append(i)
str_set = set(str)
for j in str_set:
    num = str.count(j)
    key_value[j] = num
print(key_value)

#d.输出s字符串出现频率最高的字母, 如果有多个最高,将每个都输出: max(d.values()),再循环
str_count = []
max_count = max(key_value.values())
for k in key_value.keys():
    if key_value[k]  == max_count:
        str_count.append(k)
print(str_count)

     e.请判断'boy'字符串中的每一个字母,是否都出现在s字符串里。
         如果出现,则输出True,否则,则输出False

a = "boy"
s = "aAso3idd4bgs7Dlsf9eAF"
for i in a:
    if i in s:
        continue
    else:
        print('False')
        break
else:
    print('True')

五、将字符串按照单词进行逆序,空格作为划分单词的唯一条件

如传入:”Welome to Beijing”改为 “Beijing to Welcome”

s = 'Welome to Beijing'
s1 = list(s.split(' '))
s1.reverse()
print(' '.join(s1))

六、输入一个字符串,压缩字符串如下aabbbccccbbd变成a2b5c4d1

s = 'aabbbccccbbd'
dict2 = {}
for i in s:
    if i not in dict2:
        dict2[i] = s.count(i)
s1 = ''
for k,v in dict2.items():
    s1 += k + str(v)
print(s1)

七、,将字符中单词用空格隔开

已知传入的字符串中只有字母,每个单词的首字母大写,

请将每个单词用空格隔开,只保留第一个单词的首字母大写

传入:”HelloMyWorld” 返回:”Hello my world

s = 'HelloMyWorld'
str = []
for i in range(len(s)):
    if 'A' <= s[i] <='Z' and i != 0:
        str.append(' ')
    str.append(s[i])
print(''.join(str).capitalize())

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以帮你介绍一些Python元组字符串的练习题。以下是一些常见的练习题及其答案: 1. 编写一个程序,接受用户输入的一组字,将其转换为元组,并打印出来。 ```python numbers = input("请输入一组字,以空格分隔:") numbers_list = numbers.split() numbers_tuple = tuple(numbers_list) print(numbers_tuple) ``` 2. 编写一个程序,接受用户输入的一段文本,统计其中每个字符出现的次,并将结果存储在一个字典中。 ```python text = input("请输入一段文本:") char_count = {} for char in text: if char in char_count: char_count[char] += 1 else: char_count[char] = 1 print(char_count) ``` 3. 编写一个程序,接受用户输入的两个字符串,将它们合并为一个元组,并打印出来。 ```python str1 = input("请输入第一个字符串:") str2 = input("请输入第二个字符串:") str_tuple = (str1, str2) print(str_tuple) ``` 4. 编写一个程序,接受用户输入的一段文本,将其中的大写字母转换为小写字母,并将结果存储在一个新的字符串中。 ```python text = input("请输入一段文本:") lowercase_text = text.lower() print(lowercase_text) ``` 5. 编写一个程序,接受用户输入的一组字,将其中的偶存储在一个元组中,并打印出来。 ```python numbers = input("请输入一组字,以空格分隔:") numbers_list = numbers.split() even_numbers = tuple(filter(lambda x: int(x) % 2 == 0, numbers_list)) print(even_numbers) ``` 希望以上练习题能够帮助到你!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值