如何在字符串中交替使用大写和小写字符?

时间:2019-04-20 13:09:31

标签: python

我不明白我在Codewars中为kata编码的此功能出了什么问题。

以下是说明:

将一个函数写入WeirdCase(在Ruby中为weirdcase),该函数接受一个字符串,并返回相同的字符串,每个单词的所有偶数索引字符均大写,每个单词的所有奇数索引字符均小写。刚刚说明的索引是从零开始的,因此第零个索引是偶数,因此该字符应大写。

传入的字符串将仅由字母字符和空格('')组成。仅当有多个单词时才出现空格。单词将用单个空格('')分隔。例子:

weirdcase(“ String”)#=>返回“ StRiNg” weirdcase(“ Weird string case”);#=>返回“ 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'

看起来它通过了一些测试,而它却遇到了几个单词和每个句子的问题。 你们中有人知道我做错了吗? 谢谢。

2 个答案:

答案 0 :(得分: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 :(得分: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))