我要做的是编写一个程序来打印最长的子串s
,其中字母按字母顺序排列。
例如,如果s = 'azcbobobegghakl'
,那么程序应该打印:
Longest substring in alphabetical order is: beggh
如果是领带,打印第一个子串。例如,如果s = 'abcbcd'
,那么您的程序应该打印:
Longest substring in alphabetical order is: abc
我已经运行了测试,它可以在我输入的大多数字符串上工作,但是这个有问题。你知道吗
在第15步,它应该比较2 > 0
,这是真的,但它不执行,
有人能解释一下吗?我哪里出错了?你知道吗
我的代码如下所示:
s = 'zodworqozid'
curstring = [0]
longest = [0]
for i in range(1,len(s)):
if s[i] >= str(curstring[-1]):
curstring+= s[i]
if len(curstring) > len(longest):
longest = curstring
else:
curstring = s[i]
print('Longest substring in alphabetical order is:', longest)
我不知道你所说的“在第15步,它应该比较2>;0”到底是什么意思,这是真的,但它不执行,有人能解释一下吗?我哪里出错了?”。但看看你的密码
这两个语句意味着当i==1时,条件s[i]>;=str(curstring[-1])总是真的,这在s[1]时是不对的
来纠正它。将curstring的初始值设置为s[0],“curstring=s[0]”将起作用。还有一个建议。我认为“如果s[I]>;=s[I-1]”更具可读性。你知道吗
希望这会有帮助。你知道吗
错误1:
您需要用
s
中的第一个字符初始化curstring
(而不是包含整数0
的列表)。我看到你已经知道如何在你的代码中做到这一点。(即s[0]
)这样您的后续代码就可以正确地比较s
中的下一个字符和第一个字符。你知道吗错误2:
您需要将
longest
初始化为空的列表str
(即""
),而不是包含整数0
的list
。这是因为您不需要longest
中的列表功能,因为您直接返回str
。你知道吗错误3:您将希望创建
curstring
的副本,而不是将longest
链接到curstring
。使用list(curstring)
或curstring[:]
执行此操作。这里没有虫子。我把curstring
误读为list
,而它是str
。你知道吗此处:
您正在创建两个列表,其中一个元素是整数(0)。你知道吗
稍后,这里:
您正在检查给定字母的值是否高于列表中的最后一个元素。由于Python是zero-based,所以从字母“o”开始(因为它有索引1,它恰好是范围列表中的第一个索引)。你知道吗
Char(letter)比较基于ASCII table,因此任何给定的字母都有一个大于0的“更高的值”('o'是111)。你知道吗
因为第二个代码块中的条件为真,所以字母“o”被添加到此块中的列表中:
之后,listcurstring上有两个元素:0和'o'。你知道吗
这里您将比较curstring(如上所述)和longest,后者是一个包含一个元素的列表:0(正如您在上面描述的第一个代码块中创建了包含一个元素的列表)。条件为true(2个元素多于一个元素),因此longestnowpoints与curstring位于同一列表中,因此有两个元素(长度=2)。你知道吗
稍后,正如您在提供的visualiser中看到的那样,curstring引用变量并不指向列表。它的类型在执行此行时更改:
所以稍后,当一个字符被添加时,当15。执行步骤时,结果是一个两个字母的字符串“dw”。将该字符串与具有两个元素的listlongest进行比较(如上所述)。字符串“dw”的长度为2,列表的长度为2,这就是为什么条件为false。你知道吗
您应该阅读一些关于Python中的类型以及如何在代码中创建和维护变量的知识—这将帮助您发现这些小错误。请记住,Python在列表中的语法与C++、java等语言不同,我假设你已经编写了代码
基于对其他语言数组/列表的经验。Python中的空列表是这样创建的:
相关问题 更多 >
编程相关推荐