我正在构建一个接受字符串作为输入的函数,根据某个分隔符将其拆分并以句点结束。基本上我需要做的是在字符串中的某些单词上添加某些猪拉丁语单词,如果它们符合标准的话。
标准是:
如果单词以非字母开头或不包含字符,则不执行任何操作
如果单词以元音开头,请添加'方式'到最后
如果单词以辅音开头,请将第一个字母放在最后,然后添加' ay'
对于输出示例:
simple_pig_latin("我喜欢这个")→' iway ikelay histay。' --default sep(space)和end(dot)
simple_pig_latin("我喜欢这个",sep ='。')→'我喜欢这个。' - 分隔符是点,所以整个事情是单个“单词”
simple_pig_latin(" i.like.this",sep ='。',end ='!')→' iway.ikelay .histay&#39!; --sep是'。'结束是'!'
simple_pig_latin("。")→' ..' - 只是单词是'。',所以不做任何事情并添加'。'到最后
现在是:
text()
示例错误:
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=('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z')
for word in words:
if word[0] in Vowels:
new_word= word+"way"
if word[0] in Digit:
new_word= word
if word[0] in cons:
new_word= word+"ay"
else:
new_word= word
new_sentence= new_sentence + new_word+ sep
new_sentence= new_sentence.strip(sep) + sentenceEndPunctuation
return new_sentence
IndexError:字符串索引超出范围
答案 0 :(得分:1)
您可以将字符串正确添加到一起:您使用+
运算符,就像new_string = new_string + "way"
中一样。
然而,还有两个主要问题:
要确定是否可以在列表中找到变量(在您的情况下,是元组),您可能希望使用in
运算符。您可以使用if [i][0]==Vowels:
。
if [i][0] in Vowels:
使用新单词重新构建字符串时,您需要将单词添加到new_string
。您可以使用new_string=new_string+"way"
代替new_string = new_string+word+"way"
。如果您选择这样做,您还需要决定何时将sep
添加回每个单词。
使用已知分隔符将较小字符串连接到较大字符串的另一种方法是创建新单个字符串的列表,然后使用已知分隔符将字符串重新连接在一起:
separator = ' '
words = sentence.split(separator)
newWords = []
for word in words:
newWord = doSomething(word)
newWords.append(newWord)
newSentence = separator.join(newWords)
通过这种方式,您不必担心不需要分隔符的第一个或最后一个单词。
在您的情况下,doSomething
可能如下所示:
def doSomething(word):
if word[0] in Vowels:
return word + "way"
elif word[0] in Consonants:
return word + "ay"
#and so forth
在更基础的层面上,您可能会发现在步骤中创建函数更容易,而不是尝试一次编写所有内容。在每个步骤中,您可以确保函数(或脚本)有效,然后继续下一步。例如,您的第一个版本可能很简单:
def simple_pig_latin(sentence, separator=' '):
words = sentence.split(separator)
for word in words:
print word
simple_pig_latin("i like this")
除了打印句子中的每个单词(每行一个单词)之外,它什么都不做,以向您显示该功能将句子分成与您期望的方式相同的单词。由于单词是你的功能的基础,你需要确定你有文字,并且你知道它们在哪里可以继续。例如,在此版本中,您尝试检查[i] [0]的错误会更容易被发现。
第二个版本可能会做任何事情,除了返回重新创建的句子,将其分开,然后以相同的方式将其重新组合在一起:
def simple_pig_latin(sentence, separator=' '):
words = sentence.split(separator)
new_sentence = ""
for word in words:
new_sentence = new_sentence + word + separator
return new_sentence
print simple_pig_latin("i like this")
您的第三个版本可能会尝试添加结束标点符号:
def simple_pig_latin(sentence, separator=' ', sentenceEndPunctuation='.'):
words = sentence.split(separator)
new_sentence = ""
for word in words:
new_sentence = new_sentence + word + separator
new_sentence = new_sentence + sentenceEndPunctuation
return new_sentence
print simple_pig_latin("i like this")
此时,您将意识到在结束标点符号前面添加了分隔符存在问题,因此您可以通过在完成时剥离分隔符或使用列表构建new_sentence来解决此问题。 ,或任何方式。
def simple_pig_latin(sentence, separator=' ', sentenceEndPunctuation='.'):
words = sentence.split(separator)
new_sentence = ""
for word in words:
new_sentence = new_sentence + word + separator
new_sentence = new_sentence.strip(separator) + sentenceEndPunctuation
return new_sentence
print simple_pig_latin("i like this")
只有当你能够在没有猪拉丁结尾的情况下返回新句子,并了解它是如何工作的时候,你才能将猪拉丁添加到你的功能中。当你添加猪拉丁时,你会一次做一个规则:
def simple_pig_latin(sentence, separator=' ', sentenceEndPunctuation='.'):
vowels= ('a','e','i','o','u')
words = sentence.split(separator)
new_sentence = ""
for word in words:
if word[0] in vowels:
new_word = word + "way"
else:
new_word = word
new_sentence = new_sentence + new_word + separator
new_sentence = new_sentence.strip(separator) + sentenceEndPunctuation
return new_sentence
print simple_pig_latin("i like this")
依此类推,每次添加一个更改,直到函数按预期方式执行。
当您尝试一次性完成功能完成时,您最终会遇到竞争错误,这使得很难看到功能出错的地方。通过一次构建一个函数,通常一次只能有一个错误进行调试。