变量返回奇怪的数字

时间:2013-07-16 19:40:00

标签: python for-loop

我正在制作一个针对我的挑战的程序:取一个字符串,找到每个字母的ascii值,并将这些数字加在一起并返回最终值。我到目前为止:

def AddAsciiList(string):
    ascii = [ord(c) for c in string]
    for item in ascii:
        print item
        total = ascii[i-1] + ascii[i]
    return total
string = raw_input("Enter String:")
AddAsciiList(string)

“打印项目”声明是为了帮助我看出出了什么问题。我知道total =语句还没有用,我正在修复它。基本上我要问的是,为什么“打印项目”打印数字97?!

2 个答案:

答案 0 :(得分:4)

这是因为ord()返回数字的ASCII码,ascii列表包含代码。请参阅示例 -

>>> testString = "test"
>>> testList = [ord(elem) for elem in testString]  # testList = map(ord, testString) is another way.
>>> testList
[116, 101, 115, 116]

并且,当您遍历列表时,您将获得打印出来的整数值。

它会打印97,因为您的输入字符串中必须有'a',因为

>>> chr(97)
'a'

查看help函数的含义 -

>>> help(ord)
Help on built-in function ord in module __builtin__:

ord(...)
    ord(c) -> integer

    Return the integer ordinal of a one-character string.

如果要为字符串中的字符添加所有ASCII代码,请执行

>>> sum(map(ord, testString))
448

>>> sum(ord(elem) for elem in testString)
448

答案 1 :(得分:0)

在第二个语句中,您将创建一个整数列表。我们来看一个例子:

>>> s = 'abcde'
>>> a = [ord(c) for c in s]
>>> a
[97, 98, 99, 100, 101]
>>> 

如果要对列表中的项目求和,只需使用sum。

>>> sum(a)
495

如果你想在一个膨胀的泡沫中完成整个事情:

>>> total = sum(ord(c) for c in s)
>>> total
495

希望这有帮助。