我正在学习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
我有点得到错误的说法,但我不确定该怎么办。
非常感谢
答案 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的顺序是正确的,但你必须处理大写字母的情况。