为什么我的IF语句不能执行

2024-03-29 14:39:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我要做的是编写一个程序来打印最长的子串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)

I am using python tutor to help visualize the steps


Tags: in程序lenlongestifis字母order
3条回答

我不知道你所说的“在第15步,它应该比较2>;0”到底是什么意思,这是真的,但它不执行,有人能解释一下吗?我哪里出错了?”。但看看你的密码

curstring = [0]
if s[i] >= str(curstring[-1]):

这两个语句意味着当i==1时,条件s[i]>;=str(curstring[-1])总是真的,这在s[1]时是不对的

来纠正它。将curstring的初始值设置为s[0],“curstring=s[0]”将起作用。还有一个建议。我认为“如果s[I]>;=s[I-1]”更具可读性。你知道吗

希望这会有帮助。你知道吗

错误1:

curstring = [0]

您需要用s中的第一个字符初始化curstring(而不是包含整数0的列表)。我看到你已经知道如何在你的代码中做到这一点。(即s[0])这样您的后续代码就可以正确地比较s中的下一个字符和第一个字符。你知道吗

错误2:

longest = [0]

您需要将longest初始化为空的列表str(即""),而不是包含整数0list。这是因为您不需要longest中的列表功能,因为您直接返回str。你知道吗

错误3:

longest = curstring

您将希望创建curstring的副本,而不是将longest链接到curstring。使用list(curstring)curstring[:]执行此操作。这里没有虫子。我把curstring误读为list,而它是str。你知道吗

此处:

curstring = [0]
longest = [0]

您正在创建两个列表,其中一个元素是整数(0)。你知道吗

稍后,这里:

if s[i] >= str(curstring[-1]):

您正在检查给定字母的值是否高于列表中的最后一个元素。由于Python是zero-based,所以从字母“o”开始(因为它有索引1,它恰好是范围列表中的第一个索引)。你知道吗

for i in range(1,len(s)):

Char(letter)比较基于ASCII table,因此任何给定的字母都有一个大于0的“更高的值”('o'是111)。你知道吗

因为第二个代码块中的条件为真,所以字母“o”被添加到此块中的列表中:

curstring+= s[i]

之后,listcurstring上有两个元素:0和'o'。你知道吗

if len(curstring) > len(longest):

这里您将比较curstring(如上所述)和longest,后者是一个包含一个元素的列表:0(正如您在上面描述的第一个代码块中创建了包含一个元素的列表)。条件为true(2个元素多于一个元素),因此longestnowpointscurstring位于同一列表中,因此有两个元素(长度=2)。你知道吗

稍后,正如您在提供的visualiser中看到的那样,curstring引用变量并不指向列表。它的类型在执行此行时更改:

curstring = s[i]

所以稍后,当一个字符被添加时,当15。执行步骤时,结果是一个两个字母的字符串“dw”。将该字符串与具有两个元素的listlongest进行比较(如上所述)。字符串“dw”的长度为2,列表的长度为2,这就是为什么条件为false。你知道吗

您应该阅读一些关于Python中的类型以及如何在代码中创建和维护变量的知识—这将帮助您发现这些小错误。请记住,Python在列表中的语法与C++、java等语言不同,我假设你已经编写了代码

curstring = [0]
longest = [0]

基于对其他语言数组/列表的经验。Python中的空列表是这样创建的:

new_list = []

相关问题 更多 >