我正在尝试编写计算名称数值的程序
这是我写的
name = input("Enter your full name:")
low = name.lower()
sum = 0
print ()
for ch in name :
print(sum + ord(ch)-96)
问题是当我输入一个名字时,例如我得到的安娜
输出将是
1
14
14
1
我怎样才能只得到总和?在这种情况下将是 30
我正在尝试编写计算名称数值的程序
这是我写的
name = input("Enter your full name:")
low = name.lower()
sum = 0
print ()
for ch in name :
print(sum + ord(ch)-96)
问题是当我输入一个名字时,例如我得到的安娜
输出将是
1
14
14
1
我怎样才能只得到总和?在这种情况下将是 30
您必须sum
每次在循环中更新变量。将循环更改为:
for ch in name :
sum += ord(ch)-96
print(sum)
您还可以将sum()
函数与生成器表达式一起使用:
>>> name='anna'
>>> sum(ord(ch) - 96 for ch in name)
30
您忘记更改 sum 变量。这样做:
low = name.lower()
sum = 0
print ()
for ch in name :
sum = sum + ord(ch)-96
print(sum)
bytearray
让我们直接使用添加 ascii 值sum
。然后你需要为字符串中的每个字符减去 96
sum(bytearray(low)) - 96 * len(low)
即使对于短字符串,这比在我的计算机上对每个字符使用 ord() 的速度大约是两倍,对于长字符串甚至更好
首先,避免使用 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()))
你只需要for ch in name
在正确的地方使用 - 使用生成器表达式。它比使用循环更 Pythonic:
name = input("Enter your full name:")
low = name.lower()
print ()
print sum(ord(ch)-96 for ch in name)
您也可以使用列表推导,但它会更慢
print sum([ord(ch)-96 for ch in name])
您可以将此代码用于 Python 3。
input_name = input("Enter Your Name: ").lower()
print(sum(ord(ch)-96 for ch in input_name))
事实上,我认为@gnibbler 的解决方案是最好的。
不过,我想分享我的想法。我想使用map
而不是for
循环或列表理解:
name = input("Enter your full name:")
low = name.lower()
print sum(map(lambda ch: ord(ch)-96, low))