【问题标题】:checking a string to see if it is in alphabetical order [duplicate]检查字符串以查看它是否按字母顺序[重复]
【发布时间】:2014-11-11 05:11:07
【问题描述】:

我正在学习 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

我有点明白错误在说什么,但我不确定该怎么做。

非常感谢

【问题讨论】:

  • for 循环中的 i 变量表示字符串...不是数字,因此除非 string 是字典,否则将其用作索引没有意义
  • 看起来不像那个问题的重复。他还想知道有多少个连续的字母乱序。
  • @alexthornton, padraiccunningham。你们甚至读过这个问题吗?显然,任何有半个大脑的人都可以清楚地看到这不是复制品。我检查了其他问题,他们不满意。除非您真正阅读了其中给出的问题,否则不要标记我的问题。见鬼

标签: python


【解决方案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

【讨论】:

  • 这并不是真正的模棱两可。他的代码说明了他的意思。
  • return false 返回 true,但语句没有用。如您所见,我在代码中添加了一个累加器。主要目的是只计算一个字母乱序的次数。示例 abdcgf 有 2 个字母乱序。
  • 我明白了,所以你说如果我更愿意像在第三行那样用 i 定义一个范围,那么计算机将不再将 I 视为字符串,而是将其视为索引,因为我已经尝试过?
  • 是的。例如,当您想查找字符串 [1] 时,您正在尝试查找字符串 ['a']。列表获取项目采用整数而不是字符
  • 非常感谢大家。谢谢@user3684792,您的回答非常有帮助。
【解决方案2】:

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

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

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

【讨论】:

  • 他还需要统计连续出现乱序的字母数。
  • 排序为O(n log n);您可以遍历字符串以获得更有效的O(n) 解决方案。
【解决方案3】:

提示:

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

【讨论】:

    猜你喜欢
    • 2012-01-31
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    相关资源
    最近更新 更多