gpt4 book ai didi

Python 索引超出范围解决方法

转载 作者:行者123 更新时间:2023-11-28 21:16:28 24 4
gpt4 key购买 nike

我是编码初学者。我正在寻找解决这个问题的方法:我应该编写一个函数,该函数可以接受一串包含单词和数字的文本,用空格分隔,如果连续有 3 个单词,则从该字符串输出 True。

例子:

'123 a b c' == True  
'a 123 b c' == False

我尝试过的:

def 3_in_a_row(words):
words = words.split(" ")
for i in range(len(words)):
return words[i].isalpha() and words[i+1].isalpha() and words[i+2].isalpha()

如果我尝试这样做,我会得到一个 list index out of range 错误,因为当我接近列表末尾时,i 之后没有 2 个单词要检查。

什么是最好的方法来限制这个函数,以便在 i 之后没有 2 个项目时它会停止检查?执行此操作的更好方法是什么?

最佳答案

可以限制范围:

range(len(words) - 2)

因此它不会生成不能加 2 的索引。

但是,您的循环返回得太早了。您将返回测试仅前 3 个词 的结果。例如,对于 '123 a b c',您的测试将失败,因为在第一次迭代中仅测试了 '123', 'a', 'b'。将循环更改为:

def three_in_a_row(words):
words = words.split(" ")
for i in range(len(words) - 2):
if words[i].isalpha() and words[i+1].isalpha() and words[i+2].isalpha():
return True
return False

现在如果你发现连续三个单词,它会提前返回,只有在扫描完所有单词后,它才会宣告失败并返回False

一些其他提示:

  • Python 标识符(如函数名)不能以数字开头。第一个字符必须 是字母。我将上面的函数重命名为 three_in_a_row()

  • 使用不带参数的words.split()。在任意空格 上拆分并忽略开头和结尾的空格。这意味着即使在某处之间不小心有 2 个空格,或者末尾有换行符或制表符,拆分也会起作用。

  • 您可以使用 all() function循环测试:

    if all(w.isalpha() for w in words[i:i + 3]):

    是拼写相同测试的一种更紧凑的方式。

带有这些更新的演示:

>>> def three_in_a_row(words):
... words = words.split()
... for i in range(len(words) - 2):
... if all(w.isalpha() for w in words[i:i + 3]):
... return True
... return False
...
>>> three_in_a_row('123 a b c')
True
>>> three_in_a_row('a 123 b c')
False
>>> three_in_a_row('a b c 123')
True

关于Python 索引超出范围解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28513604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com