我对这段代码一直有意见。我对Python中while循环和缩进的理解似乎还不完整。你知道吗
在下面的代码中,我要比较两个语句。如果第二条(search)语句中的字符在第一条(target)语句中,那么结果应该是“True”。否则,打印“假”。你知道吗
x = "I am a horse."
y = "a r"
targetn
指目标字符串中的索引searchn
是指搜索字符串中的索引letter
指目标字符串中的字符word
指搜索字符串中的字符def search_in_string(search, target):
targetn = 0
searchn = 0
while (targetn + 1) != len(target):
letter = target[targetn]
word = search[searchn]
if word == letter:
targetn = targetn + 1
searchn = searchn + 1
if word != letter:
targetn = targetn + 1
if (searchn + 1) == len(searchn):
return True
else:
return False
print search_in_string(y, x)
在Python中运行代码时,会出现索引错误,因为searchn
超出范围。我将不胜感激:
第12行输入错误:应该是
len(search)
,而不是len(searchn)
。你知道吗按一个错误关闭:如果索引==len(数组),则它已经离开末尾。删除所有索引测试中的
+ 1
。你知道吗第4行的剩余bug:在while条件下测试
targetn
和searchn
。根据字符串中的数据,任何一个都可以先到达末尾。(luk32建议将最终的searchn测试移到循环内部,这也修复了这个bug,但不适用于搜索为空或比目标长的特殊情况。)不,但可能是列表和数组索引。你知道吗
但更重要的是,函数和变量的命名不是很清楚,代码的样式看起来很像C
命名
在当前代码(修复了错误)中,请尝试以下操作:
search_in_string
更改为is_subsequence
search
更改为partial
target
更改为full
ipart
和ifull
或类似值letter
和word
full[ifull]
替换letter
,用partial[ipart]
替换word
现在不是更清楚了吗?你知道吗
这里我还用一个明显的
else
替换了互补的第二if
测试:风格
程序风格看起来仍然像C,带有数组、显式循环和对索引的精细操作。这里有一个机会让您了解一种称为“pythonic”的编码风格。请参阅https://stackoverflow.com/questions/58968/what-defines-pythonian-or-pythonic和这里的几个链接。你知道吗
我想说gnibbler的答案是python式的,但是如果你不懂迭代器和列表理解,可能很难理解。这是另一个有点像python的解决方案,我希望它更容易阅读。但是,您需要了解数组切片。你知道吗
不需要进入代码的逻辑。
编辑:确定
if
保护上的监视有错误。 不过,零长度参数也将是一个问题。你知道吗工作代码:
我认为有一个更简单的方法来编写你的函数
例如:
相关问题 更多 >
编程相关推荐