noob python问题,从列表中提取字母

时间:2011-08-19 02:35:12

标签: python

不确定为什么这不起作用。 我得到的错误:ord() expected a character, but string of length 0 found

代码:

phrase =  'test'
number = 0
text = 0
random1 = ''

while (number <= len(phrase)):

    letter = phrase[number:number+1]

    text = ord(letter) - ord('a')
    ....
    number = number + 1

如果是打印字母,我会在第一次迭代时获得t

感谢,

5 个答案:

答案 0 :(得分:2)

你在最后一次迭代中失败了。因为你让数字取值为len(phrase),所以你试图将字符串分割到最后。

例如:

>>> "abc"[3:4]
''

字符串索引的范围从0到len(s)-1。

BTW:Python为您提供了更好的迭代字符串的方法:

phrase = 'test'
for letter in phrase:
    text = ord(letter) - ord('a')
    ....

答案 1 :(得分:1)

你正在迭代短语的结尾,试试这个:

phrase =  'test'
number = 0
text = 0
random1 = ''

while (number < len(phrase)):

    letter = phrase[number:number+1]

    text = ord(letter) - ord('a')

请注意:

while (number < len(phrase)):

答案 2 :(得分:0)

你想要一个字符而不是一个字符串,对吗?尝试替换

letter = phrase[number:number+1]

letter = phrase[number]

答案 3 :(得分:0)

您确实需要显示更多代码。我是什么人?你在每个循环中递增它吗?

通常情况下,如果你正在递增i以像for循环一样行动,你想要循环这样的数字&lt; len(短语),而不是&lt; =。

此外,您可以替换

letter = phrase [number:number + 1]

letter = phrase [number]

答案 4 :(得分:0)

使用for..in来处理字符串中的每个字母:

<强>代码

phrase = 'test'
for letter in phrase:
   print letter

<强>输出

t
e
s
t

这将是进行字符迭代的更“pythonic”方式。通过这种方式,您可以保证在不必考虑结束时触及每个字母,就像您的代码中发生的那样。