计算名称的数值

时间:2013-09-19 06:38:15

标签: python

我正在尝试编写计算名称数值的程序

这就是我写的

name = input("Enter your full name:")
low = name.lower()
sum = 0
print ()
for ch in name :
    print(sum + ord(ch)-96)

问题是当我输入一个名字,例如anna我得到了

输出将是

  

1

     

14

     

14

     

1

我怎么才得到这笔钱?在这种情况下将是30

7 个答案:

答案 0 :(得分:4)

您必须在循环中每次更新sum变量。将你的循环改为:

for ch in name :
    sum += ord(ch)-96

print(sum)

您还可以将sum()函数与生成器表达式一起使用:

>>> name='anna'
>>> sum(ord(ch) - 96 for ch in name)
30

答案 1 :(得分:3)

您忘记更改总和变量了。这样做:

low = name.lower()
sum = 0
print ()
for ch in name :
    sum = sum + ord(ch)-96
print(sum)

答案 2 :(得分:2)

bytearray允许我们使用sum直接添加ascii值。然后你需要为字符串

中的每个字符减去96
sum(bytearray(low)) - 96 * len(low)

对于我的计算机上的每个字符使用ord()的速度大约是短字符串的两倍,对于长字符串更好

答案 3 :(得分:1)

您只需在正确的位置使用for ch in name - 使用生成器表达式。它比使用循环更pythonic:

name = input("Enter your full name:")
low = name.lower()
print ()

print sum(ord(ch)-96 for ch in name)

您也可以使用list comprehension,但速度会慢一些

print sum([ord(ch)-96 for ch in name])

答案 4 :(得分:1)

首先,避免使用python关键字作为变量。在您的代码中,您已将关键字sum设置为值0

其次,观察你处于for循环中,因此在for循环进行过程中没有任何东西可以存储累积的总和。

以下是我提出的建议:

name = input("Enter your full name: ").lower() #Convert input to lowercase
print () #Print a newline
print (sum(ord(ch) - 96 for ch in name)) #Use the sum function to compute sum of letters

一行:

print (sum(ord(ch) - 96 for ch in input("Enter your full name: ").lower()))

答案 5 :(得分:1)

您可以将此代码用于Python 3。

input_name = input("Enter Your Name: ").lower()

print(sum(ord(ch)-96 for ch in input_name))

答案 6 :(得分:0)

事实上,我认为来自@gnibbler的解决方案是最好的。

不过,我想分享我的想法。我想使用map而不是for循环或列表理解:

name = input("Enter your full name:")
low = name.lower()
print sum(map(lambda ch: ord(ch)-96, low))