如何在字符串中替换大写和小写字符?

问题描述 投票:1回答:2

我不明白我为Codewars中的kata编写的这个函数有什么问题。

这些是说明:

写一个函数toWeirdCase(Ruby中的怪异)接受一个字符串,并返回相同的字符串,每个单词大写字母中包含所有偶数索引字符,并且每个单词中的所有奇数索引字符都更低。刚解释的索引是基于零的,因此零第i索引是偶数,因此该字符应该是大写的。

传入的字符串只包含字母字符和空格('')。只有在有多个单词时才会出现空格。单词将由单个空格('')分隔。例子:

weirdcase(“String”)#=>返回“StRiNg”怪异(“奇怪的字符串大小写”);#=>返回“WeIrD StRiNg CaSe”

这是我编码的函数:

def to_weird_case(string):
return "".join(char.upper() if string.find(char) % 2 == 0 else char.lower() for char in string)

这是我得到的结果:

Time: 695ms Passed: 5 Failed: 8 Exit Code: 1
Test Results:
toWeirdCase
should return the correct value for a single word
Test Passed
Test Passed
Test Passed
'TeST' should equal 'TeSt'
'LookS' should equal 'LoOkS'
Test Passed
Test Passed
'PaSSEd' should equal 'PaSsEd'
 should return the correct value for multiple words
'ThIs Is A TesT' should equal 'ThIs Is A TeSt'
'LookS Like you pASSeD' should equal 'LoOkS LiKe YoU PaSsEd'
'ThIs Is ThE FINaL TEsT casE' should equal 'ThIs Is ThE FiNaL TeSt CaSe'
'JuSt kIddINg' should equal 'JuSt KiDdInG'
'Ok fInE YoU ArE DonE now' should equal 'Ok FiNe YoU ArE DoNe NoW'

看起来它通过了一些测试,而它只是用几个单词和每个句子来挣扎。你们有谁知道我做错了什么吗?谢谢。

python
2个回答
2
投票

只需遍历字符,对于奇数或偶数字符,转换为较低或较高的字符。我们对列表中的每个单词执行此操作,方法是将字符串拆分为单词列表,然后将字符串拼接回来。

def to_weird_case(s):

    li = s.split()
    res = []
    for s in li:
        result = ''
        for idx, c in enumerate(s):
            if idx%2 == 0:
                result += c.upper()
            else:
                result += c.lower()
        res.append(result)
    return ' '.join(res)

输出是

print(to_weird_case('String'))
print(to_weird_case("Weird string case"))
print(to_weird_case("TeST"))
print(to_weird_case("LookS"))
print(to_weird_case("PaSSEd"))
print(to_weird_case("ThIs Is A TesT"))
print(to_weird_case("LookS Like you pASSeD"))
print(to_weird_case("ThIs Is ThE FINaL TEsT casE"))
print(to_weird_case("JuSt kIddINg"))
print(to_weird_case("Ok fInE YoU ArE DonE now"))
#StRiNg
#WeIrD StRiNg CaSe
#TeSt
#LoOkS
#PaSsEd
#ThIs Is A TeSt
#LoOkS LiKe YoU PaSsEd
#ThIs Is ThE FiNaL TeSt CaSe
#JuSt KiDdInG
#Ok FiNe YoU ArE DoNe NoW

1
投票

str.find('char')返回它找到该字符的第一个索引,这样你的情况就不能用于重复字符

def to_weird_case(string):
    return "".join(char.upper() if i% 2 == 0 else char.lower() for 
i, char in enumerate(string))
© www.soinside.com 2019 - 2024. All rights reserved.