gpt4 book ai didi

python-3.x - 我试图检查索引是否超出范围,但是我使用的代码给出的索引超出范围?

转载 作者:行者123 更新时间:2023-12-03 09:06:14 26 4
gpt4 key购买 nike

我构建了此功能,以将字符串输入更改为 pig 拉丁语。我正在尝试检查索引是否超出范围,但是我的检查方法是使索引超出范围。

如下所示:

def simple_pig_latin(input, sep=' ', end='.'):
words=input.replace(" ", " ").split(sep)
new_sentence=""
Vowels= ('a','e','i','o','u')
Digit= (0,1,2,3,4,5,6,7,8,9)
cons=('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z')
characters= ('!','@','#','$','%','^','&','*','.')
for word in words:
if word[0] == " ":
new_word=word
else:
if word[0] in Vowels:
new_word= word+"way"
if word[0] in Digit:
new_word= word
if word[0] in cons:
first_letter=word[0] #saves the first letter
change= str(word) #change to string
rem= change.replace(first_letter,'')
put_last= rem+first_letter #add letter to end
new_word= put_last+"ay"
if word[0] in characters:
new_word= word
new_sentence= new_sentence+new_word+sep

new_sentence= new_sentence.strip(sep)+end
return new_sentence

您可以看到第一个if语句正在检查它是否为空,但是我得到了这个确切的错误:

“第9行IndexError:字符串索引超出范围”

我还能如何检查空序列?我不能使用range(len(words))中的单词,因为那样我的if语句都不起作用。它会告诉我对象不可下标。

最佳答案

在循环中,您假定word不为空,这根本不能保证,因为您是根据空间进行拆分的,并且当空间超过1个时可以发出空字段。

>>> "a  b".split(" ")
['a', '', 'b']

因此,您可以使用不带任何参数的 split()(仅适用于类似空格的字符),或者如果您使用其他分隔符,请在循环之前过滤掉空字段,例如在列表理解中:
words= [ w for w in input.split(sep) if w ]

现在,您确定 words的每个项目至少包含1个字符。

编辑:关于 split和过滤出空字符串的很好的解释就这么多了,但是由于您可以将 l用作 hello world的分隔符,因此似乎并没有削减它,因此请回到基础知识:
def simple_pig_latin(input, sep=' ', end='.'):
words=input.split(sep)
new_sentence=""
Vowels= ('a','e','i','o','u')
Digit= (0,1,2,3,4,5,6,7,8,9)
cons=set(('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'))
characters= ('!','@','#','$','%','^','&','*','.')
new_sentence = []

for word in words:
if word:
if word[0] == " ":
new_word=word
else:
if word[0] in Vowels:
new_word= word+"way"
elif word[0] in Digit:
new_word= word
elif word[0] in cons:
first_letter=word[0] #saves the first letter
change= str(word) #change to string
rem= change.replace(first_letter,'')
put_last= rem+first_letter #add letter to end
new_word= put_last+"ay"
elif word[0] in characters:
new_word= word
new_sentence.append(new_word)
else:
new_sentence.append(word)

return sep.join(new_sentence)+end

更改您的代码:
  • 使用列表,最后使用join加入
  • 只是过滤掉空词,但无论如何都会将其放入列表中
  • 很多elif而不是if
  • 使用set进行consomns以更快地查找

  • 现在:
    print(simple_pig_latin("hello world",sep='l'))

    产量:
    ehayllo worwaylday.

    关于python-3.x - 我试图检查索引是否超出范围,但是我使用的代码给出的索引超出范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43054025/

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