Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 交替弦格的问题_Python_String_Algorithm_Function_Loops - Fatal编程技术网

Python 交替弦格的问题

Python 交替弦格的问题,python,string,algorithm,function,loops,Python,String,Algorithm,Function,Loops,通过CodeWars网站上的练习,我需要帮助为一个简单的功能指出正确的方向: 编写一个接受 字符串,并返回包含所有偶数索引字符的相同字符串 在每个单词中使用大写字母,以及每个单词中的所有奇数索引字符 下壳。刚才解释的索引是基于零的,所以 第i个索引的零是偶数,因此该字符应为大写 箱子 传入的字符串将仅由字母字符和 空格(“”)。只有存在多个单词时,才会出现空格。 单词将由单个空格(“”)分隔 到目前为止,我掌握的代码如下: def to_weird_case(string): #TODO

通过CodeWars网站上的练习,我需要帮助为一个简单的功能指出正确的方向:

编写一个接受 字符串,并返回包含所有偶数索引字符的相同字符串 在每个单词中使用大写字母,以及每个单词中的所有奇数索引字符 下壳。刚才解释的索引是基于零的,所以 第i个索引的零是偶数,因此该字符应为大写 箱子

传入的字符串将仅由字母字符和 空格(“”)。只有存在多个单词时,才会出现空格。 单词将由单个空格(“”)分隔

到目前为止,我掌握的代码如下:

def to_weird_case(string):
    #TODO
    new_string = ''
    add = 0 
    for letter in range(len(string)):
        if string[letter] == ' ':
            add += 1
            new_string += string[letter]
            continue

        if (letter+add)%2 == 0:
            new_string += string[letter].upper()
        else:
            new_string += string[letter].lower()

    print("Returning: " + new_string)
    return new_string
我试图迭代每个字母,同时考虑空格,但我不确定如何“跳过”空格,这就是我的函数混乱的原因?如果有人能给我指出正确的方向,那将很有帮助,谢谢。

只要创建一个计数器(一个整数变量),它将跟踪你是在偶数索引中还是在奇数索引中。如果遇到空格,计数器将不会递增,从而忽略它

def to_weird_case(string):
    #TODO
    counter = 0
    new_string = ''
    add = 0 
    for letter in range(len(string)):
        if string[letter] == ' ':
            new_string += string[letter]
            continue

        # Increment counter only if not space
        counter = counter + 1
        if (counter)%2 == 0:
             new_string += string[letter].upper()
        else:
            new_string += string[letter].lower()

        print("Returning: " + new_string)
        return new_string

如果使用枚举函数,可以避免使用计数器

def to_weird_case(string):
    #TODO
    new_string = ''
    for i,letter in enumerate(string):
        if string[i] == ' ':
            new_string += string[i]
            continue

        if i%2 == 0:
            new_string += string[i].upper()
        else:
            new_string += string[i].lower()

    print("Returning: " + new_string)
    return new_string

通过首先使用
str.split
拆分字符串,使用
enumerate
转换每个单词以选择偶数和奇数字符,然后在空格上使用
str.join
重新连接字符串,可以忽略空格:

def transform_word(s):
    return ''.join(x.upper() if i%2==0 else x.lower() for i, x in enumerate(s))
    #                        ^------------^-> ternary operator for alternating

def to_weird_case(string):
    return ' '.join(transform_word(s) for s in string.split())

print(to_weird_case('This is a lovely day'))
# ThIs Is A LoVeLy DaY

如果你最终想考虑空格,直接使用<代码> TrasixWord 函数:

print(transform_word('This is a lovely day'))
# ThIs iS A LoVeLy dAy

输出:返回:您好我的名字是aBcDeFgHiJk尝试列表理解

def my_func(your_string):
    x = [ x.upper() if i%2==0 else x.lower() for i,x in enumerate(your_string)]
    return ''.join(x)

your_string = 'hello my name is lmurdock12'
print(my_func(your_string))
输出:

HeLlO My nAmE Is lMuRdOcK12
因此,在这个列表理解中,基本上我们使用enumerate()

enumerate获取一个iterable(字符串、列表等)并逐个(i)给出项,其中i为0、1、2、3……等等

因此,在列表理解中,我们检查从iterable string
您的列表中返回的项目
x
是否对应于
i
。所以在
hello中,我的名字是lmurdock12
对于
h
我将是
0
,对于
e
我将是
1
,依此类推。如果
i%2==0
,这意味着我们在列表中保留
x.upper()
,否则我们保留
x.lower()

最后使用
'.join(x)
加入列表,并在需要时返回它


注意:这可以通过使用
index()
在不使用枚举的情况下完成,但这会使我们的算法效率有点低,因为我们每次都搜索值并返回索引。最好使用enumerate。

您的代码不是真正的Python。您的函数实际上只能有一行代码。这就是Python如此酷的原因

def ToWeirdCase(word):
    return ''.join([char.upper() if pos%2==0 else char.lower() for pos, char in enumerate(word)])

嗨,今天早上我遇到了同样的问题,这是我的答案:

def to_weird_case(sentence):
counter = 0 # Counter set to zero, because of the even number fact at zero-ith.
weird_sentence = "" # This is the string we are going to return at the end.
for character in sentence:
    if character == " " and counter % 2 == 0: 
        weird_sentence += character 
        counter += 1    # Incrementation that will now make each characters before a space to be uppercased.
    elif character != " " and counter % 2 == 0:
        weird_sentence += character.upper() 
    else:
        weird_sentence += character.lower()
    counter += 1
return weird_sentence

我希望它能帮到你。

这里有一个有效的解决方案。希望有帮助

def to_weird_case(string)
  words = string.split(" ")

  words.map do |word|
    word.chars.map.with_index {|letter, idx| idx.even? ? letter.upcase : letter.downcase }.join("")
  end.join(" ")
end

好问题,有几个好工具可以使用;),在您的情况下,我将使用enumerate代替counterPlus+1来提及enumerate@Damianalattenero您需要返回字符串而不是列表,因此使用
join()
还有为什么需要
和char!=“
这一行?没用,漂亮的回答!我试图理解列表的理解,但我有点远:/尽可能地学习和使用它。相信我,这会很有帮助的。python中的神奇事物。很好的建议,谢谢,这就是为什么我的答案,上面的一个,是关于专家声音的并行解决方案,总是出现在python问题中。一如既往的回答很好
def to_weird_case(sentence):
counter = 0 # Counter set to zero, because of the even number fact at zero-ith.
weird_sentence = "" # This is the string we are going to return at the end.
for character in sentence:
    if character == " " and counter % 2 == 0: 
        weird_sentence += character 
        counter += 1    # Incrementation that will now make each characters before a space to be uppercased.
    elif character != " " and counter % 2 == 0:
        weird_sentence += character.upper() 
    else:
        weird_sentence += character.lower()
    counter += 1
return weird_sentence
def to_weird_case(string)
  words = string.split(" ")

  words.map do |word|
    word.chars.map.with_index {|letter, idx| idx.even? ? letter.upcase : letter.downcase }.join("")
  end.join(" ")
end