检查字符串以查看它是否按字母顺序排列

时间:2014-11-10 20:58:56

标签: python

我正在学习python。我目前自学的任务是编写一个程序,它接受一个字符串并检查天气与否,字符串中的字母按字母顺序排列。如果不是,程序将返回字母乱序的实例数。我请求stackoverflow的帮助,因为我的代码看起来不错,但我一直收到错误,其中包含以下内容。

代码

def inversions  (string):
    res = 0
    for i  in  string:
        if string[i+1] < string[i]:
            res += 1
            print( res)

我的错误

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    inversions  ('ghutinhjdbessadfg')
  File "C:\Users\Christopher\Downloads\pratice.py", line 63, in inversions
    if string[i+1] < string[i]:
TypeError: Can't convert 'int' object to str implicitly

我有点得到错误的说法,但我不确定该怎么办。

非常感谢

3 个答案:

答案 0 :(得分:1)

i遍历每个字母,因此您无需使用它来索引字符串。更简单的方法是使用sorted函数。

def alphabetical(s):
    return list(s) == sorted(s)

>>> alphabetical('abcxyz')
True
>>> alphabetical('zyxcba')
False

答案 1 :(得分:1)

你的意思是多少是乱序的 - 例如字符串

,这是不明确的

zabcdef

所有字母都不按顺序排列。这是你的意思,还是你想要重新排序字符串所需的操作次数?

要检查字符串是否按字母顺序排列,请尝试回答这个问题:

checking if a string is in alphabetical order in python

def isInAlphabeticalOrder(word):
 for i in range(len(word) - 1):
    if word[i] > word[i + 1]:

        return False
return True

你的问题是因为你使用字符串作为列表索引。

以您的代码为例,我修改了以上内容以提供

def number_out_of_place(word):
  out_of_place = 0
  for i in range(len(word) - 1):
    if word[i] > word[i + 1]:
        out_of_place += 1
  return out_of_place

答案 2 :(得分:0)

提示:

您可以使用ord(s)将字母转换为数字表示。对于a-z的顺序是正确的,但你必须处理大写字母的情况。