Faster way to assign numerical value to letters?
我试图从列表中的单词中读取每个字符,然后根据该单词中的每个字母为它们赋值。我的代码太长了,我相信一定有一个更短的方法来完成它…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | for c in tempWord: if(c =="A"): tempSum += 1 elif(c =="B"): tempSum += 2 elif(c =="C"): tempSum += 3 elif(c =="D"): tempSum += 4 elif(c =="E"): tempSum += 5 elif(c =="F"): tempSum += 6 elif(c =="G"): tempSum += 7 elif(c =="H"): tempSum += 8 elif(c =="I"): tempSum += 9 elif(c =="J"): tempSum += 10 elif(c =="K"): tempSum += 11 elif(c =="L"): tempSum += 12 elif(c =="M"): tempSum += 13 elif(c =="N"): tempSum += 14 elif(c =="O"): tempSum += 15 elif(c =="P"): tempSum += 16 elif(c =="Q"): tempSum += 17 elif(c =="R"): tempSum += 18 elif(c =="S"): tempSum += 19 elif(c =="T"): tempSum += 20 elif(c =="U"): tempSum += 21 elif(c =="V"): tempSum += 22 elif(c =="W"): tempSum += 23 elif(c =="X"): tempSum += 24 elif(c =="Y"): tempSum += 25 elif(c =="Z"): tempSum += 26 |
这可能是个愚蠢的问题,但无论如何还是要谢谢你!
使用
1 2 3 4 | A = ord('A') for c in tempWord: if 'A' <= c <= 'Z': tempSum += ord(c) - A + 1 |
1 2 | A = ord('A') tempSum = sum(ord(c) - A + 1 for c in tempWord if 'A' <= c <= 'Z') |
对于这个问题,最好的建议是创建一个将字母和数字关联起来的字典:
1 | d = {'A':1, 'B':2 ... } |
用这个改变你的
1 | tempSum += d[letter] |
现在,通过详细查看您的示例和组织,似乎要求和的值是字母表中大写字母的位置,因此可以使用类似这样的
1 2 3 | import string tempSum += (string.uppercase.index(letter) + 1) |
希望这有帮助
如何:
1 2 3 4 5 6 | import string def assign(word): return sum(string.uppercase.index(ch.upper())+1 for ch in word) print assign('SIMPLE') |
1 2 | if 'A'<=c<='Z': tempsum+=ord(c)-ord('A')+1 |
我喜欢编字典。这应该比在列表中使用
根据映射的复杂程度,您可能希望以多种不同的方式构建它。一个是:
1 2 3 4 | >>> import string >>> d = {c: i for i,c in enumerate(string.ascii_uppercase, 1)} >>> d {'A': 1, 'C': 3, 'B': 2, 'E': 5, 'D': 4, 'G': 7, 'F': 6, 'I': 9, 'H': 8, 'K': 11, 'J': 10, 'M': 13, 'L': 12, 'O': 15, 'N': 14, 'Q': 17, 'P': 16, 'S': 19, 'R': 18, 'U': 21, 'T': 20, 'W': 23, 'V': 22, 'Y': 25, 'X': 24, 'Z': 26} |
之后:
1 2 3 4 | >>> word ="INCONTROVERTIBLE" >>> score = sum(d[c] for c in word) >>> score 201 |
或者,如果您希望更宽容丢失的字母,可以使用默认值为0的
1 2 3 4 | >>> word ="THIS IS A TEST" >>> score = sum(d.get(c,0) for c in word) >>> score 149 |