Python—我需要重新排列列表中字符串元素的字符

Python—我需要重新排列列表中字符串元素的字符,python,string,list,for-loop,Python,String,List,For Loop,所以我有一个函数,它接受一个字符串输入,然后把它转换成拉丁语 对于所有以辅音开头的单词(除元音外的所有单词),我必须将该单词的第一个字母移到后面,然后在单词中添加“ay” 例如,“like”将变成“ikelay” 在我的程序中,首先分割给我的字符串输入,然后检查新创建列表的每个元素,以查看该元素的第一个字符是元音、辅音还是其他 def simple_pig_latin(input, sep=" ", end="."): splitinput = input.split(sep)

所以我有一个函数,它接受一个字符串输入,然后把它转换成拉丁语

对于所有以辅音开头的单词(除元音外的所有单词),我必须将该单词的第一个字母移到后面,然后在单词中添加“ay”

例如,“like”将变成“ikelay”

在我的程序中,首先分割给我的字符串输入,然后检查新创建列表的每个元素,以查看该元素的第一个字符是元音、辅音还是其他

def simple_pig_latin(input, sep=" ", end="."):
    splitinput = input.split(sep)
    for i in splitinput:
        if splitinput[splitinput.index(i)][0] in ['a','e','i','o','u']:
            splitinput[splitinput.index(i)] = str(i) + "way"
        elif splitinput[splitinput.index(i)][0] in ['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z']:
            splitinput[splitinput.index(i)] = str(i) + "ay"
        else:
            continue
    finalstring = ' '.join(splitinput)
    finalstring = finalstring + end


simple_pig_latin("i like this")

请注意,在elif分支中,我应该取I的第一个字母,并将其放在该单词的末尾,然后在其上添加“ay”。给定输入字符串“i like this”我应该将第二个单词(因为like以l开头,使其成为辅音)转换为“ikelay”我将如何重新排列like,使其成为ikel?

对于您的问题,您可以将代码
str(i)+“ay”
更改为
i[1:+i[0]+“ay”
在您的
elif
分支中。

我试图保留您的结构,同时仍然删除无用的代码:

def simple_pig_latin(input_text, sep=" ", end="."):
    words = input_text.split(sep)
    new_words = []
    for word in words:
        if word[0].lower() in ['a', 'e', 'i', 'o', 'u']:
            new_words.append(word + "way")
        else:
            new_words.append(word[1:] + word[0] + "ay")
    finalstring = sep.join(new_words)
    finalstring = finalstring + end
    return finalstring


print simple_pig_latin("i like this")
# iway ikelay histay.
注:

  • 你的函数需要返回一些东西
  • 创建新列表可能比修改原始列表更容易
  • 如果
    i
    已经是字符串,则无需调用
    str(i)
  • i
    通常用于
    0
    n-1
    之间的整数。不是为了语言
  • 单词[0]
    是单词的第一个字母
  • word[k:][/code>是
    word
    中没有第一个
    k
    字母的
  • <> LI>为了简化代码,我认为如果第一个字母不是元音,它必须是辅音。
  • 我在第一个字母上调用
    lower()
    ,以检查
    'I'
    是否是元音

为什么要执行
splitinput[splitinput.index(i)]
?我建议您进行搜索,并查看堆栈溢出上的Pig拉丁程序的一些示例。另外,不要使用
input
作为变量名:这会影响内置的
input
函数。这里的许多其他程序都使用我尚未学习的内容或本作业中不允许的内容。关于使用“输入”,这不是我的决定。赋值迫使我们调用该参数输入。如果您迭代列表并希望通过在列表中保留索引来更改该列表,请对i使用
,enumerate中的text(splitinput)
。尝试
str(text[1:])+text[0]+“ay”
。尝试打印文本[1:];了解情况的最佳方式。谢谢你的提示!是的,函数没有返回任何东西,因为它仍然是一个wip。嗯,还有一件事,我该如何修改代码以将sep作为参数读取?例如,simple_pig_latin(输入,sep='-')将简单地拆分破折号前后的所有字符。我目前的sep等于一个空格,但我如何更改它,以便它从给定的输入中读取sep?当我将sep设置为none时,得到了一个“'function'对象没有属性'split'”错误,这样就可以用给定的任何输入来填充它。