基础数据类型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...")