基础数据类型dict作业练习

基础数据类型dict作业练习


☆程序调试环境☆
python 3.6.6 安卓版(手机)

知识点dict

技巧: 求助大佬+不断改码


跑码效果

在这里插入图片描述
在这里插入图片描述


My python code

#! usr/bin/nve python
# coding: utf-8

py_tip = """
本python代码块,是练习用dict作业。
用random模块模拟生成一个班一次考试
的成绩,用dict存储并作总分平均分的
统计,列印出前经名及低于平均分的人数。
"""

import random #加载随机模块

#定义接收用户输入函数
def input_int(s,n):
    """
    本函数功能是接收输入,
    返回int正整数。
    s
    """
    while True:
        s_in = input("%18s"%s)
        #如果输入的是正整数,返回该正整数,否则重新输入。
        if s_in.isdigit()==True and int(s_in) in range(1,n+1): return int(s_in)
        else:
            print("\n\n\n")
            s_no = "请输入1-%d的正整数!"%n
            print("%18s"%s_no)
            
#定义随机生成字符串函数
def random_str(s,n):
    """
    随机生成指定长度的字符串,
    s 为指定字符串列表
    n 为指定长度。
    return s #生成的随机字符串
    """
    d = []
    for i in range(n): d.append(random.choice(s))
    return "".join(d)


def analyse(dic):
    """
    对传入的字典分数进行统计分析,
    打印分析结果。
    return None
    """
    name_list = []
    score_list = []
    """用 for 取键或值,必须用两个变量
    分别接收键和值,用一个变量就是取键值
    对了。可以只保存需要键或值。"""
    for k,v in dic.items():
        name_list.append(k)
        score_list.append(v)
        
    #计算总分平均分
    score_sum = sum(score_list)
    score_average = score_sum/len(score_list)
    #统计低于平均分的人数
    student_less = 0
    for i in score_list:
        if i<score_average: student_less += 1
    #打印总分+平均分+低于平均的人数
    print("\n"*3)
    s = "全班总分: %.1f\n"%score_sum
    print("%23s"%s)
    s = "全班平均分: %.1f\n"%score_average
    print("%22s"%s)
    s = "全班低于平均分的有 %d 人。\n"%student_less
    print("%26s"%s)

    input("\n"*2+" "*8+"Any key contiue...")

    #复制分数列表,用于分数排序
    score_sort = []
    for i in score_list: score_sort.append(i)
    #分数列表去重
    #for i in score_sort:
        #k = 0
        #for n in score_sort:
            #if n==i: k +=1
            #if k>1: score_sort.remove(n)
    #排序分数列表
    #score_sort.sort(reverse=True)
    
    #也可以先排倒序再去重(代码易读些)
    score_sort.sort(reverse=True)
    score = ""
    for i in score_sort:
        if i==score: score_sort.remove(i)
        score = i

    #前x名列表
    s = "列印前几名(1~15)? "
    x= input_int("\n\n\n"+"%18s"%s,15)
    s = "前%2d 名列表"%int(x)
    print("\n\n\n"+"%10s:"%s)
    for i in range(0,int(x)):
        #从排序后的分数列表取第i名分数
        score = score_sort[i]
        #初始化该名次分数的列表
        score_name = []
        k = 0
        for n in score_list:
            #k同步遍历姓名列表
            name = name_list[k]
            k += 1
            t = 0
            #与所取名次分数相同,追加姓名到i名次分数列表
            if n==score: score_name.append(name)
        #拼接姓名列表,打印i名次+姓名+分数
        s = "\n"+" "*6+"第{0}名: {1}  {2}"
        if len(score_name)>1:
            s = "\n"+" "*6+"{1} 并列第{0}名:  {2}"
        name = " & ".join(score_name)+","
        print(s.format(i+1,name,score))

#【main】
#打印程序说明并暂停
s = "程序说明"
print("\n"*3+"%20s"%s)
#print("\n"*2)
for i in py_tip:
    if i=="\n": print("\n"*2+" "*4,end="")
    else: print(i,end="")

input("\n"*2+" "*8+"Any key contiue...")

#随机生成分数字典
#调用随机字符串函数生成姓名+分数模拟班级成绩
name_fast = ["张","王","覃","岑","李","赵","程","朱","钱","孙","阮","陆","郝","刘","高","齐","诸葛","南郭","慕容","东方","吴","陈","万","洪","霍","何","石"]
name_late = ["文","博","晨","玉","雨","莹","艺","芳","春","一","轩","蕾","雷","萱","亿","凤","仙","灿","辉","耀","光","辰","臣","林","琳","斋","芬","尼","琪"]
score_dic = {}
num = 1
s = "\n"*3+" "*6+"模拟班级人数(1-60): "
num_input = input_int(s,60) 

print("\n"*2+" "*8+"正在生成班级模拟成绩……\n")
while num<=int(num_input):
    name = random_str(name_fast,1)+random_str(name_late,random.randint(1,2))
    s = "\n"+" "*12+"{0:3}. {1}:{2:5.1f}"
    s_int = "\n"+" "*12+"{0:3}. {1}:{2:3}"
    if random.randint(0,1)==0: score = random.randint(0,100)
    else: score = random.uniform(0,100)
    if score%1==0: print(s_int.format(num, name, score))
    else: print(s.format(num, name, score))
    score_dic[name] = round(score,1)
    num += 1

s = "成绩数据已存入dict。"
print("\n"*3)
print("%23s"%s)
input("\n"+" "*11+"按任意键开始分析……")

#调用函数分析分数
analyse(score_dic)

input("\n"*2+" "*8+"Any key contiue...")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻精灵_cq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值