我不熟悉Python和机器学习。我试图解决Project Euler #22问题,它需要从每个名称中获取字母值,并与其字母位置相乘。 正确答案是871198282,但我一直得到823763619
我已经检查了包含名称的.txt文件。它们看起来不错,导入的名称文件没有任何问题。我已经一步一步地检查了代码。当我单独调用给定名称中的任何名称时,我的函数会给我正确的数字,例如,COLIN,它会给我49714。 然后我认为我的主体是错误的,我把所有的数字组合在一起,但是对我来说它看起来很好
你能给我一些我必须仔细看的线索吗? 此外,我知道我的代码看起来像一个noob,我可以为我的代码升级到下一个级别提出任何建议吗
事先非常感谢
# Using names.txt (right click and 'Save Link/Target As...'), a 46K text file containing over five-thousand first names,
# begin by sorting it into alphabetical order. Then working out the alphabetical value for each name, multiply this value
# by its alphabetical position in the list to obtain a name score.
# For example, when the list is sorted into alphabetical order, COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53,
# is the 938th name in the list. So, COLIN would obtain a score of 938 × 53 = 49714.
# What is the total of all the name scores in the file?
import os
import pandas as pd
import numpy as np
total_counts = []
path ='C:\\python_practice_data'
file_path = os.path.join(path, 'name.txt')
name_list = pd.read_csv(file_path)
name_list=list(name_list)
name_list.sort()
def counts(name):
_alphabet = {
'A': 1,
'B': 2,
'C': 3,
'D': 4,
'E': 5,
'F': 6,
'G': 7,
'H': 8,
'I': 9,
'J': 10,
'K': 11,
'L': 12,
'M': 13,
'N': 14,
'O': 15,
'P': 16,
'Q': 17,
'R': 18,
'S': 19,
'T': 20,
'U': 21,
'V': 22,
'W': 23,
'X': 24,
'Y': 25,
'Z': 26
}
total = 0
cha_name=[]
for i in range(len(name_list)):
if name in name_list[i]:
cha_name = list(name)
print(cha_name)
for j in range(len(cha_name)):
if cha_name[j] in _alphabet:
total += _alphabet[cha_name[j]]
#print(total)
else:
break
return total
#Count the name in alphabericl order
def numbering(name):
for i in range(len(name_list)):
if name in name_list[i]:
#print(i+1)
break
else:
continue
return i+1
#Main
for i in range(len(name_list)):
name = name_list[i]
total_numbers = numbering(name)*counts(name)
total_counts.append(total_numbers)
print(sum(total_counts))
您的代码有点长,需要解包的内容太多,无法涵盖这里的所有内容,但这里有一些注释
关于
counts
函数:name_list
,但实际上除了检查name
是否在列表中之外,您不使用它,但这与函数的功能无关李>你的
count
函数的一个短得多的版本:这将计算
name
中所有字符的字符值列表的总和。它调用name.upper()
以确保名称中的所有字母都转换为大写。它使用ord(ch)
来获得每个字符的序数值-ord('A')
是65,ord('B')
是66,等等,所以它减去64得到A=1,B=2,等等代码的其余部分应该: -读取输入文件(假定名称唯一,没有重复) -按字母顺序排序 -使用结果列表为列表中的每个名称计算其在列表中的位置乘以用
count
计算的字符值 -将所有姓名的总数相加关于
numbering
函数:同样,这只需要一行代码:
每个列表都有一个方法,它只告诉您列表中某个值的索引是什么。因此,如果
'Colin'
是列表上的编号938,name_list.index('COLIN')
将返回938最后,您可以使用
pandas
来读取文件,但由于您不使用DataFrame
或任何其他特定于pandas
的数据结构,并且只需要列表中的所有内容,因此您可以同样轻松地使用内置Python库,因为它不是一个真正的.csv文件,而只是一个带有名称的纯文本文件然后,整个程序会变成类似于:
注意:将1添加到
name_list.index(name)
,因为index
从0开始,但是名字可能应该在位置1,而不是0或者,如果你不喜欢所谓的列表理解的速记法:
这里没有使用真正高级的东西,不需要外部库
相关问题 更多 >
编程相关推荐