python第7章实训作业_python 学习作业,第12次

一、作业题要求如下:每次的作业题目均来自万门大学课程的微信打卡题目要求。

4e6439e2f8432add68e11e2ac78688ce.png

二、我独立编写的代码如下:

一直希望把电脑用好,让电脑帮助我高效率地完成大量工作,编写一点代码能解决问题,只是我刚刚才开始学习python , 代码可能会写得乱七八糟, 我会努力写好的。

本次使用中位数评分法,变化比较大,问题是各项指标权重相同,这是导致深圳排名靠后的原因。

本次作业的具体代码如下:

def median_scoring(data,score_median = 7, score_max = 10, score_min = 4, score_sign = 1):

    # score_sign = 1 or -1, 1是按从大到小得分从高到低,-1是按从小到大得分从高到低

    import numpy as np

#     print(data)

    score_median = score_median

    score_max = score_max

    score_min = score_min

    score_sign = score_sign

    if score_sign == -1:

        cal_data = [i*score_sign for i in data]

    else:

        cal_data = data

#     print(cal_data)

    data_score=[]

    data_median = np.median(cal_data)

    for i in cal_data:

        if i == data_median:

            s = score_median

        elif i > data_median:

            s = round(score_median + (score_max - score_median)*((i-data_median)/(np.max(cal_data) - data_median)),2)

        else:

            s = round(score_median - (score_median - score_min)*((data_median-i)/(data_median - np.min(cal_data))),2)

        data_score.append(s)    

    return data_score

# data = np.random.randint(2,15,10).tolist()

# a = median_scoring(data,score_sign = -1)

# print(a)

import xlrd 

book=xlrd.open_workbook('C:/Users\Dingrong_Zhou\Desktop\万门作业\city_data.xlsx')

sheet=book.sheet_by_index(0) 

main_data_list=[] 

for row in range(3,sheet.nrows): 

    temp_dict={} 

    print(sheet.row_values(row)) 

    temp_dict['城市']=sheet.row_values(row)[0]

    temp_dict['2019GDP']=sheet.row_values(row)[1]

    temp_dict['2018总人口']=sheet.row_values(row)[2]

    temp_dict['2018平均房价']=sheet.row_values(row)[3]

    temp_dict['2018平均工资']=sheet.row_values(row)[4]

    temp_dict['地铁总里程']=sheet.row_values(row)[5]

    temp_dict['高校数量']=sheet.row_values(row)[6]

    temp_dict['三甲医院数量']=sheet.row_values(row)[7]

    temp_dict['2018小学生数量']=sheet.row_values(row)[8]

    main_data_list.append(temp_dict)

for i_list in range(len(main_data_list)):

    main_data_list[i_list]['原榜单得分']=len(main_data_list)-i_list

print('城市原榜单得分(由高到低):')

for j_list in range(len(main_data_list)):

    print(main_data_list[j_list]['城市'],main_data_list[j_list]['原榜单得分'])

print('-'*60)   

for i in range(len(main_data_list)):

    main_data_list[i]['收入房价比']=round(main_data_list[i]['2018平均工资']/12/main_data_list[i]['2018平均房价'],2)

for kw in ['2019GDP','2018总人口','2018平均房价','2018平均工资','地铁总里程','高校数量','三甲医院数量','2018小学生数量','原榜单得分','收入房价比']:

    data=[]

    for city in main_data_list:

        data.append(city[kw])

    print(kw)

    if kw == '2018平均房价':

        s = median_scoring(data,score_sign = -1)

    else:

        s= median_scoring(data)

    print(s)

    i=0

    for city in main_data_list:

#         print(i)

        city[kw+'得分']=s[i]

        print(city['城市'],kw+'得分',s[i])

        i=i+1

    print('-'*60)

for city in main_data_list:

    city['城市总得分']=round(city['原榜单得分得分']+city['2019GDP得分']+city['2018总人口得分']+city['2018平均房价得分']+city['2018平均工资得分']+city['地铁总里程得分']+city['高校数量得分']+city['三甲医院数量得分']+city['2018小学生数量得分']+city['收入房价比得分'],2)

    print(city['城市'],'总得分',city['城市总得分'])

print('-'*60)

def get_value(dic,k):   

    return dic.get(k)

cities_byscore=sorted(main_data_list,key=lambda x:get_value(x,'城市总得分'),reverse=True)

# print(cities_byscore)

print(f'城市总得分(由高到低):')

for j_score in range(len(cities_byscore)):

    print(cities_byscore[j_score]['城市'],cities_byscore[j_score]['城市总得分'],'新排名:', j_score+1,'原排名:', 11-cities_byscore[j_score]['原榜单得分'])

三、运行结果如下图:

76d7fbb822913e02365802aed699806c.png

0a7be70d31f12483c1bf82d2f93090e4.png

039c7b254beeefb4de072354b4d94942.png

7156865296a9a4d80f434f4d8661675b.png

97189ee782d75657f2eddadbd67105d0.png

6b5e46872b8cb01b7c97dcd5576e2161.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值