python4.30每周一练

1.已知字典 dic = {"k1": "v1", "k2": "v2", "k3": "v3"},实现以下功能

 a.遍历字典 dic 中所有的key
b.遍历字典 dic 中所有的value
c.循环遍历字典 dic 中所有的key和value
d.添加一个键值对"k4","v4",输出添加后的字典 dic
e.删除字典 dic 中的键值对"k1","v1",并输出删除后的字典 dic
f.删除字典 dic 中 'k5' 对应的值,若不存在,使其不报错,并返回None
g.获取字典 dic 中“k2”对应的值
h.已知字典dic2 = {'k1':"v111",'a':"b"} 编写程序,使得dic2 = {'v111':"k1",'b':"a"}

dic = {"k1": "v1", "k2": "v2", "k3": "v3"}

#a
for key in dic:
    print(key)

#b
for value in dic.values():
    print(value)

#c
for key,value in dic.items():
    print(key,value)

#d
dic["k4"] = "v4"
print(dic)

#e
dic.pop("k1")
print(dic)

#f
if dic.get("k5"):
    result = dic.pop("k5")
    print(result)
else:
    print(None)

#g
value = dic["k2"]

#h
dic2 = {'k1':"v111",'a':"b"}
dic3 = {}
for key,value in dic2.items():
    dic3[value] = key
dic2 = dic3
print(dic2)

 2.已知列表list1 = [11,22,11,33,44,55,66,55,66],统计列表中每个元素出现的次数,生成一个字典,结果为{11:2,22:1.....}

list1 = [11,22,11,33,44,55,66,55,66]
dict1 = {}
for num in list1:
  if num not in dict1:
    dict1[num] = 1
  else:
    dict1[num] += 1

 3.已知如下列表students,在列表中保存了6个学生的信息,根据要求完成下面的题目

students = [
{'name': '小花', 'age': 19, 'score': 90, 'gender': '女', 'tel':
'15300022839'},
{'name': '明明', 'age': 20, 'score': 40, 'gender': '男', 'tel':
'15300022838'},
{'name': '华仔', 'age': 18, 'score': 90, 'gender': '女', 'tel':
'15300022839'},
{'name': '静静', 'age': 16, 'score': 90, 'gender': '不明', 'tel':
'15300022428'},
{'name': 'Tom', 'age': 17, 'score': 59, 'gender': '不明', 'tel':
'15300022839'},
{'name': 'Bob', 'age': 18, 'score': 90, 'gender': '男', 'tel':
'15300022839'}
]

a.统计不及格学生的个数
b.打印不及格学生的名字和对应的成绩
c.统计未成年学生的个数
d.打印手机尾号是8的学生的名字
e.打印最高分和对应的学生的名字
f.删除性别不明的所有学生
g.将列表按学生成绩从大到小排序 

# a.统计不及格学生的个数
count = 0
for stu_dict in students:
    if stu_dict["score"] < 60:
        count += 1
print("不及格学生的个数:%d" % (count))

# b.打印不及格学生的名字和对应的成绩
for stu_dict in students:
    if stu_dict["score"] < 60:
        print("姓名:%s,成绩:%d" % (stu_dict['name'],stu_dict['score']))

# c.统计未成年学生的个数
count = 0
for stu_dict in students:
    if stu_dict["age"] < 18:
        count += 1
print("未成年学生的个数:%d" % (count))

# d.打印手机尾号是8的学生的名字
for stu_dict in students:
    if stu_dict["tel"][-1] == "8":
        print("姓名:%s" % (stu_dict['name']))

# e.打印最高分和对应的学生的名字
# 方式一
 max_score = students[0]['score']
 for stu_dict in students:
     if stu_dict['score'] > max_score:
         max_score = stu_dict['score']

# 方式二
max_score = max([stu_dict["score"] for stu_dict in students])
print("最高成绩为:%d" % (max_score))
for stu_dict in students:
    if stu_dict['score'] == max_score:
        print("姓名:%s,成绩:%d" % (stu_dict['name'],max_score))

# f.删除性别不明的所有学生
# 方式一
 new_students = []
 for stu_dict in students:
     if stu_dict["gender"] != "不明":
         new_students.append(stu_dict)
 print(new_students)

# 方式二
 for stu_dict in students[:]:
     if stu_dict['gender'] == "不明":
         students.remove(stu_dict)
 print(students)

# g.将列表按学生成绩从大到小排序
# 方式一:冒泡排序
 for i in range(len(students) - 1):
     for j in range(len(students) - i - 1):
         # 比较的是成绩,交换的是字典
         if students[j]["score"] < students[j + 1]['score']:
             students[j],students[j + 1] = students[j + 1],students[j]
 print(students)

# 扩展:方式二:sort(key),key用于指定排序的规则,此处使用的是匿名函数
students.sort(key=lambda stu_dict:stu_dict['score'],reverse=True)
print(students)

4.写一个学生作业情况录入并查询的小程序

a.录入学生作业情况:字典添加
b.查看学生作业情况:字典查询
c.录入时允许输入3次,3次输入不正确提示失败次数过多,禁止继续录入 

homeworks = {
        'Amy':{'2018.3.22':'未交','2018.3.23':'已交'},
        'Lily':{'2018.3.22':'未交','2018.3.23':'未交'},
        }
chioce = {'1':'查询','2':'录入'} #定义字典,可以避免输入‘0’或‘1’以外的选择时报错
#user_chioce input是字符串,如果用int转化非数字的字符串会报错,所以将key定义为字符串‘1’,而非数字1
user_chioce = input('请输入您的选择:1为查询学生作业情况,2为录入学生作业情况').strip()
if chioce.get(user_chioce) == '查询': #用get方法,输入key不在字典中不会报错。用chioce[user_choice],输入key不在字典中会报错
    name = input('请输入要查询的学生姓名').strip()
    if name == '':
        print('查询学生姓名不能为空')
    elif name in homeworks: #判断key是否在字典中存在
        print('%s的作业情况是%s'%(name,homeworks[name]))#字典查询
    else:
        print('查询学生不存在')
elif chioce.get(user_chioce) == '录入':
    state = {'0':'未交','1':'已交'} #定义字典,可以避免输入‘0’或‘1’以外的选择时报错
    #放在循坏外,避免多次初始化,优化性能
    for i in range(3):
        enter_name = input('请输入要录入的学生姓名').strip()
        enter_date = input('请输入要录入学生作业的日期').strip()
        enter_state = input('请输入学生作业状态:0为未交,1为已交').strip()
        if state.get(enter_state):  #只要有状态就可以,不需要判断状态等于‘已交’或‘未交’
            if enter_name == '' or enter_date == '':
                print('学生姓名及作业日期不能为空')
            else:
                if enter_name in homeworks:
                    homeworks[enter_name].update({enter_date:state[enter_state]})#学生已存在,更新子字典
                else:
                    homeworks[enter_name] = {enter_date:state[enter_state]}#学生不存在,直接添加新k-v
                print('%s的作业情况是%s'%(enter_name,homeworks[enter_name]))
                print('所有学生作业情况为%s' % homeworks)
                break
        else:
            print('输入学生状态有误')
else:
    print('选择输入有误')

你可能感兴趣的:(日常练习,C++,笔记,p2p,网络协议,网络,算法,开发语言)