鱼C论坛

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

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

[复制链接]
发表于 2016-6-16 19:09:50 | 显示全部楼层
本帖最后由 mather 于 2016-6-17 09:43 编辑
path = r'C:\Users\CloudCross\Desktop\names.txt'
textFile = open(path)
try:
    all_the_text = textFile.read()
finally:
    textFile.close()
data = all_the_text.replace('"','').split(',')

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

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

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

最终结果:871198282

评分

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

查看全部评分

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

使用道具 举报

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

arr = []
sum = 0

for i in a:
        arr.append(i)
        
arr.sort()

for i in range(len(arr)) :
        count = 0
        for j in arr[i] :
                count += ord(j)-64

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

使用道具 举报

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

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


def sumstr(inputstr):
    """计算字符串的字母值之和
    """
    count = 0
    for i in inputstr:
        count += ord(i)
    return count

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

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 编辑

严重支持
def name2num(name):
    alph='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    s=0
    for each in name:
        s+=alph.find(each)+1
    return s
    
with open('names.txt') as f:
    a=sorted(f.read().split(','))
result=0
for each in a:
    result+=(a.index(each)+1)*name2num(each)
print(result)
运行结果
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-11-22 05:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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