我正在尝试编写计算名称数值的程序
这就是我写的
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
答案 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值。然后你需要为字符串
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))