为什么我的 IF 语句不执行
Why does my IF Statement not execute
我正在做的练习的重点是编写一个程序来打印 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)
错误 1:
curstring = [0]
您需要使用 s
中的第一个字符(而不是包含整数 0
的列表)来初始化您的 curstring
。我看到您已经知道如何在您的代码中执行此操作。 (即 s[0]
)这是为了让您的后续代码能够正确地将下一个字符与 s
中的第一个字符进行比较。
错误 2:
longest = [0]
您需要将 longest
初始化为一个空的 列表 str
(即 ""
)而不是 list
包含整数 0
。这是因为您不需要 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)):
字符(字母)比较基于 ASCII table,因此给定的任何字母都会有一个 "higher value" 而不是 0('o' 是 111)。
因为第二个代码块的条件为真,字母 'o' 添加到此块的列表中:
curstring+= s[i]
之后,列表 curstring 有两个元素:0 和 'o'.
if len(curstring) > len(longest):
这里你比较的是 curstring(如上所述)和 longest,后者是一个包含一个元素的列表:0(如您在上述第一段代码中创建了一个包含一个元素的列表)。条件为真(2 个元素多于 1 个元素),所以 longest 现在 points 到与 curstring 相同的列表,因此有两个元素(并且长度 = 2)。
稍后,正如您在提供的可视化工具中看到的那样,curstring 引用变量未指向列表。执行此行时,它的类型发生了变化:
curstring = s[i]
所以后来,当添加一个字符时,当执行第 15 步时,结果是一个两个字母的字符串 "dw"。该字符串与包含两个元素(如上所述)的列表 longest 进行比较。字符串 "dw" 的长度为 2,列表的长度为 2,这就是条件为假的原因。
您应该阅读一下 Python 中的类型以及如何在代码中创建和维护变量 - 这将帮助您发现那些小错误。请记住,Python 在列表方面的语法与 C++ 或 Java 等语言不同 - 我假设您已经编写了该代码
curstring = [0]
longest = [0]
基于使用其他语言的 arrays/lists 的经验。 Python 中的空列表是这样创建的:
new_list = []
我不确定 "On step 15, it should compare 2>0 which is true, but it does not execute, can someone explain this? where am i making a mistake?" 到底是什么意思。但是看看你的代码,
curstring = [0]
if s[i] >= str(curstring[-1]):
这两个语句的意思是当i==1时,Condition s[i] >= str(curstring[-1]) 总是为真,这在when s[1]中是不对的
进行更正。将 curstring 的初始值设置为 s[0],"curstring = s[0]" 将起作用。还有一个建议。我认为 "if s[i]>= s[i-1]" 更具可读性。
希望这会有所帮助。
我正在做的练习的重点是编写一个程序来打印 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)
错误 1:
curstring = [0]
您需要使用 s
中的第一个字符(而不是包含整数 0
的列表)来初始化您的 curstring
。我看到您已经知道如何在您的代码中执行此操作。 (即 s[0]
)这是为了让您的后续代码能够正确地将下一个字符与 s
中的第一个字符进行比较。
错误 2:
longest = [0]
您需要将 longest
初始化为一个空的 列表 str
(即 ""
)而不是 list
包含整数 0
。这是因为您不需要 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)):
字符(字母)比较基于 ASCII table,因此给定的任何字母都会有一个 "higher value" 而不是 0('o' 是 111)。
因为第二个代码块的条件为真,字母 'o' 添加到此块的列表中:
curstring+= s[i]
之后,列表 curstring 有两个元素:0 和 'o'.
if len(curstring) > len(longest):
这里你比较的是 curstring(如上所述)和 longest,后者是一个包含一个元素的列表:0(如您在上述第一段代码中创建了一个包含一个元素的列表)。条件为真(2 个元素多于 1 个元素),所以 longest 现在 points 到与 curstring 相同的列表,因此有两个元素(并且长度 = 2)。
稍后,正如您在提供的可视化工具中看到的那样,curstring 引用变量未指向列表。执行此行时,它的类型发生了变化:
curstring = s[i]
所以后来,当添加一个字符时,当执行第 15 步时,结果是一个两个字母的字符串 "dw"。该字符串与包含两个元素(如上所述)的列表 longest 进行比较。字符串 "dw" 的长度为 2,列表的长度为 2,这就是条件为假的原因。
您应该阅读一下 Python 中的类型以及如何在代码中创建和维护变量 - 这将帮助您发现那些小错误。请记住,Python 在列表方面的语法与 C++ 或 Java 等语言不同 - 我假设您已经编写了该代码
curstring = [0]
longest = [0]
基于使用其他语言的 arrays/lists 的经验。 Python 中的空列表是这样创建的:
new_list = []
我不确定 "On step 15, it should compare 2>0 which is true, but it does not execute, can someone explain this? where am i making a mistake?" 到底是什么意思。但是看看你的代码,
curstring = [0]
if s[i] >= str(curstring[-1]):
这两个语句的意思是当i==1时,Condition s[i] >= str(curstring[-1]) 总是为真,这在when s[1]中是不对的
进行更正。将 curstring 的初始值设置为 s[0],"curstring = s[0]" 将起作用。还有一个建议。我认为 "if s[i]>= s[i-1]" 更具可读性。
希望这会有所帮助。