鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 冬雪雪冬

[技术交流] 小练习:20160613 文件中所有名字的得分之和是多少?

[复制链接]
发表于 2016-6-16 19:09:50 | 显示全部楼层
本帖最后由 mather 于 2016-6-17 09:43 编辑

  1. path = r'C:\Users\CloudCross\Desktop\names.txt'
  2. textFile = open(path)
  3. try:
  4.     all_the_text = textFile.read()
  5. finally:
  6.     textFile.close()
  7. data = all_the_text.replace('"','').split(',')

  8. import numpy as np #这个包你可能没有,如果有就当我没说,没有的话你可以去下载一个,数据分析必备

  9. arr = np.array(data)
  10. sortedarr = np.sort(arr)

  11. from functools import reduce
  12. zimuzhi = np.array([reduce(lambda a,b: a+b,list(map(lambda y: y-64,list(map(ord,x))))) for x in sortedarr])
  13. index=np.arange(1,len(sortedarr)+1)
  14. print((index * zimuzhi).sum())
复制代码


最终结果:871198282

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-17 00:22:59 | 显示全部楼层
答案:871198282
  1. f = open("names.txt", "r")
  2. line = f.read()
  3. f.close()
  4. line = line.replace('"','')
  5. a = line.split(',')

  6. arr = []
  7. sum = 0

  8. for i in a:
  9.         arr.append(i)
  10.        
  11. arr.sort()

  12. for i in range(len(arr)) :
  13.         count = 0
  14.         for j in arr[i] :
  15.                 count += ord(j)-64

  16.         sum += (i+1) * count
  17.        
  18. print(sum)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-17 10:53:15 | 显示全部楼层
你好,以下是我的作业答案,请指教,貌似没啥创新性
  1. # 打开文件并读取
  2. fileadr = input('请输入你要读取的文件:')
  3. file_object = open(fileadr)
  4. try:
  5.     all_the_text = file_object.read()
  6. finally:
  7.     file_object.close()

  8. # 把字符串s转换成为列表,每个元素就是名称,并排序
  9. strlist = all_the_text.replace('"', '').split(',')
  10. strlist.sort()


  11. def sumstr(inputstr):
  12.     """计算字符串的字母值之和
  13.     """
  14.     count = 0
  15.     for i in inputstr:
  16.         count += ord(i)
  17.     return count

  18. # 计算得分之和
  19. totalcount = 0
  20. for namestr in strlist:
  21.     print('第{0}个字符串"{1}"的字符值之和是:{2}'.format(
  22.         strlist.index(namestr)+1, namestr, sumstr(namestr)))
  23.     totalcount += sumstr(namestr) * (strlist.index(namestr) + 1)

  24. print('所有名字的得分总和是:%d' % totalcount)
复制代码

点评

一个小错误,ord得到是字母的ascii码,需要减去64才是字母的位置。  发表于 2016-6-20 21:49
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-20 01:20:50 | 显示全部楼层
本帖最后由 DingRan 于 2016-6-20 01:22 编辑

严重支持
  1. def name2num(name):
  2.     alph='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3.     s=0
  4.     for each in name:
  5.         s+=alph.find(each)+1
  6.     return s
  7.    
  8. with open('names.txt') as f:
  9.     a=sorted(f.read().split(','))
  10. result=0
  11. for each in a:
  12.     result+=(a.index(each)+1)*name2num(each)
  13. print(result)
复制代码

运行结果
  1. 871198282
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-20 11:18:22 | 显示全部楼层
不错支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-22 09:39:24 From FishC Mobile | 显示全部楼层
bacon6581 发表于 2016-6-13 12:26

请问list_txt[0]=list_txt[0][1:]
list_txt[-1]=list_txt[-1][0:-1]
这段是什么意思。。新手看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-25 15:10:36 | 显示全部楼层
leozyre 发表于 2016-6-22 09:39
请问list_txt[0]=list_txt[0][1:]
list_txt[-1]=list_txt[-1][0:-1]
这段是什么意思。。新手看不懂

用‘","’打断数据后,变成的数列为:
"MARY,PATRICIA,LINDA,BARBARA,……BRODERICK,ALONSO"
就是最前边的引号,后最后边的引号没去掉

此时 list_txt[0] 的内容为:“MARY
       list_txt[-1] 的内容为:ALONSO"

ist_txt[0][1:] 的内容为 MARY (即第一个字符舍弃)
list_txt[-1][0:-1] 的内容为 ALONSO (即最后一个字符舍弃)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-25 21:42:47 | 显示全部楼层
bacon6581 发表于 2016-6-25 15:10
用‘","’打断数据后,变成的数列为:
"MARY,PATRICIA,LINDA,BARBARA,……BRODERICK,ALONSO"
就是 ...

谢谢谢谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 15:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表