对于我的一个程序,我们必须为每个字母分配数字值,然后获取用户输入并找到字母/它们的数字值的总和。到目前为止,这是我的代码:
import string
L = raw_input("Type your list of strings here (follow each string with a comma): ").split(",")
print L
n = len(L)
List = L[0:n]
counter = 0
x = L[counter]
y = L[counter + 1]
d1 = {c: L for L,c in enumerate(string.ascii_uppercase, 1)}
d1['A'] = 1
d1['B'] = 2
d1['C'] = 3
d1['D'] = 4
d1['E'] = 5
d1['F'] = 6
d1['G'] = 7
d1['H'] = 8
d1['I'] = 9
d1['J'] = 10
d1['K'] = 11
d1['L'] = 12
d1['M'] = 13
d1['N'] = 14
d1['O'] = 15
d1['P'] = 16
d1['Q'] = 17
d1['R'] = 18
d1['S'] = 19
d1['T'] = 20
d1['U'] = 21
d1['V'] = 22
d1['W'] = 23
d1['X'] = 24
d1['Y'] = 25
d1['Z'] = 26
d1['a'] = 1
d1['b'] = 2
d1['c'] = 3
d1['d'] = 4
d1['e'] = 5
d1['f'] = 6
d1['g'] = 7
d1['h'] = 8
d1['i'] = 9
d1['j'] = 10
d1['k'] = 11
d1['l'] = 12
d1['m'] = 13
d1['n'] = 14
d1['o'] = 15
d1['p'] = 16
d1['q'] = 17
d1['r'] = 18
d1['s'] = 19
d1['t'] = 20
d1['u'] = 21
d1['v'] = 22
d1['w'] = 23
d1['x'] = 24
d1['y'] = 25
d1['z'] = 26
d1[''] = 0
d1[','] = 0
def compare(x, y):
p = 0
score = sum(d1[c] for c in L)
score1 = score(x[p])
score2 = score(y[p])
当用户输入是单个字符串时,我可以正常工作但是当用户输入字符串列表时我无法使其工作。我需要能够输入一个列表,然后能够找到列表中任何特定字符串的数值。请帮我找到我错的地方,因为我不明白为什么这段代码不起作用。
答案 0 :(得分:0)
我终于想起了我知道这个问题的地方。好老欧拉22.
在评论中,您说过要在计算单词分数的同时或之后对进行排序。而是在分割和获取名称之后立即对名称进行排序。 Python的Timsort实际上非常快。然后在排序列表中使用enumerate()。使用枚举,您可以跟踪索引,这将使事情变得非常容易。
下面的剧透。因为扰码标记不能很好地处理代码块,所以必须这样做
。
。
。
。
。
。
。
。
。
。
。
import string
lettersDict = {c: L for L,c in enumerate(string.ascii_uppercase, 1)}
lettersDict[" "] = 0
lettersDict[","] = 0
lettersDict["\""] = 0
def summation(word):
return sum(lettersDict[s.upper()] for s in word)
total = 0
with open("names.txt","r") as f:
names = f.read().split(",")
names.sort()
for idx, word in enumerate(names, 1):
total += idx*summation(word)
print total